实现单链表的逆置或叫翻转
2015-07-04 14:51
316 查看
链表的问题一直不能很轻松地想明白,其实主要是理解链表结点的结构,以及他是如何进行遍历和指针变换的。
单链表的逆置,需要使用额外的三个指针,分别指向当前遍历到的结点、他的前一个结点,以及他的后一个结点。分别定义为 Current,Pre,pNext;这三个指针同时进行链表的下行,直到第三个指针指向表尾NULL;最后返回最后一个结点的位置;
下面是具体代码,请作参考:
单链表的逆置,需要使用额外的三个指针,分别指向当前遍历到的结点、他的前一个结点,以及他的后一个结点。分别定义为 Current,Pre,pNext;这三个指针同时进行链表的下行,直到第三个指针指向表尾NULL;最后返回最后一个结点的位置;
下面是具体代码,请作参考:
// ReverseListNode.cpp : 定义控制台应用程序的入口点。 /* @mishidemudong @2015-7-4-14:50 */ // #include "stdafx.h" #include<iostream> #include<stdlib.h> using namespace std; struct ListNode { int m_value; ListNode *m_pNext; }; ListNode* ReverseList(ListNode* pHead) { ListNode* Current = pHead; ListNode* Pre = NULL; ListNode* ReverseListNode = NULL; while (Current != NULL) //遍历链表所有的结点; { ListNode* pNext = Current->m_pNext; //先保存下一个结点的地址,三个指针始终跑在最前面 if (pNext == NULL) ReverseListNode = Current; Current->m_pNext = Pre; //实现翻转,即中间的结点的m_pNext指向前一个位置,或叫三个当中第一个结点; Pre = Current; //更新第一个结点进行前移; Current = pNext; //更新中间的结点进行前移; } return ReverseListNode; } void PrintList(ListNode* pHead) { if (pHead == NULL) cout << "The List is empty!"; else { ListNode* p = pHead; while (p != NULL) { cout << p->m_value << " "; p = p->m_pNext; } cout << endl; } } ListNode *CreateList() { int value, n; ListNode *pHead; ListNode *Current=NULL; ListNode*pNext=NULL; pHead = NULL; printf("请输入您要建立的链表长度:\n"); scanf_s("%d", &n); printf("请输入您要输入的数据:\n"); for (int i = 0; i < n; ++i) { scanf_s("%d", &value); Current = (ListNode*)new(ListNode); Current->m_value = value; if (pHead == NULL) pNext = pHead = Current; else pNext->m_pNext = Current; pNext = Current; } Current->m_pNext = NULL; return pHead; } int _tmain(int argc, _TCHAR* argv[]) { ListNode *p; ListNode* pHead; p = CreateList(); PrintList(p); pHead = ReverseList(p); printf("逆置之后的链表为:\n"); PrintList(pHead); return 0; }
相关文章推荐
- 【c语言】 模拟实现库函数的atoi函数
- 【前端】#001 编码规范
- 【计算机网络学习】之总述
- mysql主从复制(超简单)
- shell中的命令替换和变量替换
- c#上传文件(二)使用文件流保存文件
- 移动顿兼容以及测试常用网站
- git 版本回退之关于git reset --hard 和 --soft区别
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转
- Python调用paramiko模块实现远程管理多台服务器
- 《Java课程实习》日志(周六)
- 黑马程序员---IO流
- 535 5.7.8 Error: authentication failed: generic failure安装EMOS时SMTP测试报错
- KMP算法详解
- 黑马程序员---正则表达式
- 排序 - 插入法
- git版本控制
- 排序 - 插入法
- [Leetcode]-Path Sum
- 关于html头部引用(meta,link)