【剑指offer】反转链表,C++实现(链表)
生活随笔
收集整理的这篇文章主要介绍了
【剑指offer】反转链表,C++实现(链表)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1.题目
- 输入一个链表的头结点,首先反转链表后,然后输出链表的所有元素(牛客网)。
2.思路
# 反转链表
辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。
翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指向node(确定翻转链表表头节点),然后node指向left(翻转链表),退出循环;如果不是最后一个节点,则node指向left(翻转链表),移动left和node指针。
# 鲁棒性
- 空链表
- 有一个节点的链表
- 有多个节点的链表
3.code
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* ReverseList(ListNode* pHead) 12 { 13 // 反转指针 14 ListNode* pNode=pHead; // 当前节点 15 ListNode* pPrev=nullptr;// 当前节点的上一个节点 16 ListNode* pNext=nullptr;// 当前节点的下一个节点 17 ListNode* pReverseHead=nullptr;//新链表的头指针 18 19 // 反转链表 20 while(pNode!=nullptr) 21 { 22 pNext=pNode->next; // 建立链接 23 24 if(pNext==NULL) // 判断pNode是否是最后一个节点 25 pReverseHead=pNode; 26 27 pNode->next=pPrev; // 指针反转 28 pPrev=pNode; 29 pNode=pNext; 30 } 31 return pReverseHead; 32 } 33 };
转载于:https://www.cnblogs.com/wanglei5205/p/8572458.html
总结
以上是生活随笔为你收集整理的【剑指offer】反转链表,C++实现(链表)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 数据挖掘实战(一):Kaggle竞赛经典
- 下一篇: PHP获取IP的多种方式解析