反转链表,(5)
来源:互联网 发布:中文数据库有哪些 编辑:程序博客网 时间:2024/05/20 04:48
实现链表的反转,比如原来是 1->2->3->4->5;翻转后就是 5->4->3->2->1,
思路是:首先定义pNode指向头结点,pRrev指向NULL,pNext指向NULL,在链表非NULL的情况下,让 pNext = pNode->m_pNext; 也就是pNext指向了第二个节点,这时候如果pNext ==NULL了,说明已经到达了原链表的尾部节点,否则执行第一次反转,(1)pNode->m_pNext = pPrev;让第一个节点的m_pNext指向NULL,这时候pPrev还是NULL的。(2)pPrev = pNode;让pRrev指向第一个节点(2)pNode = pNext;pNode后移一个节点,接着如果pNode不为NULL,执行第二次循环。第二次循环会反转第二个节点,一次类推。
ListCommon.h 依赖:
链表基本操作的函数实现。(1)#include <iostream>#include "ListCommon.h"using namespace std;ListNode* reversedListNode(ListNode* pHead){if(pHead == NULL)return NULL;ListNode* pReversedHead = NULL;ListNode* pNode = pHead;ListNode* pNext = NULL;ListNode* pPrev = NULL; cout << "original list:"<<endl;PrintList(pHead);while(pNode != NULL){pNext = pNode->m_pNext;//pNext等于null,说明已经到达尾部,if(pNext == NULL){pReversedHead = pNode;}//开始处理反转,第一次循环,反转第一个节点,第二次反转第二个节点...pNode->m_pNext = pPrev;pPrev = pNode;pNode = pNext;}cout << "reversed list:"<<endl;PrintList(pReversedHead);return pReversedHead;}int main(int argc, char* args[]){ListNode* pNode1 = CreateListNode(1);ListNode* pNode2 = CreateListNode(2);ListNode* pNode3 = CreateListNode(3);ListNode* pNode4 = CreateListNode(4);ListNode* pNode5 = CreateListNode(5);ConnectListNodes(pNode1,pNode2);ConnectListNodes(pNode2,pNode3);ConnectListNodes(pNode3,pNode4);ConnectListNodes(pNode4,pNode5);reversedListNode(pNode1);DestoryList(pNode1); return 0;}
测试结果:
PC:~/algorithm$ g++ ListCommon.cpp ReversedList.cpp -o ReversedList
PC:~/algorithm$ ./ReversedList
original list:
print list begin ---
1
2
3
4
5
print list end
reversed list:
print list begin ---
5
4
3
2
1
print list end
阅读全文
0 0
- 反转链表,(5)
- 对链表进行反转(部分反转)
- 链表反转(未完)
- 反转链表(递归)
- 链表的建立与反转(递归反转和非递归反转)
- 第5天 反转链表
- Java链表反转(复习.复习)
- 单向链表反转(java)
- 面试算法(十五)反转链表
- 链表(4)----反转链表
- 反转链表 (递归法)
- 反转链表(递归实现)
- 反转链表(剑指offer)
- Reverse Linked List(反转链表)
- 剑指offer(17):反转链表
- 剑指offer(12)-反转链表
- 反转链表(非递归)
- 单向链表反转(倒置)问题
- 内存寻址
- 六、入侵Activiti-SpringBoot使用代码动态编辑流程文件
- IAR无法打印浮点的解决方法
- B
- Jeesite移除list-,view-等前缀,方便SEO
- 反转链表,(5)
- PHP中stdClass的意义
- js 的Object.assign(),要慎用
- 树莓派使用小记
- [LeetCode] 526. Beautiful Arrangement
- Rxjava学习
- 新生多校第六场 插塔憋憋乐(数论+贪心)
- bzoj4989 [Usaco2017 Feb]Why Did the Cow Cross the Road(树状数组求逆序对个数)
- CMake+VS2013编译与安装32/64位PCL1.8RC1源码