LeetCode 206. Reverse Linked List 解题报告
来源:互联网 发布:长春一台网络直播 编辑:程序博客网 时间:2024/05/16 01:44
LeetCode 206. Reverse Linked List 解题报告
题目描述
Reverse a singly linked list.
示例
没有给出。
限制条件
没有明确给出。
解题思路
我的思路:
如下图:
对于每一个节点,我们要做的事就是把当前节点的next指针改成指向前一个节点,为了避免断链,我们在更改当前节点的next指针时要先保存好指向下一个节点的指针,因为我们需要三个指针完成反转链表的操作,分别是指向前一个节点的pPrev,指向当前节点的pCur,指向下一个节点的pNext。
具体的过程是:
1.使用pNext保存指向pCur下一个节点的指针
2.更新pCur的next指针指向前一个节点,即pCur->next = pPrev
3.当前节点的指向已经修正完毕,所以更新pPrev指向当前节点,更新pCur指向下一个节点(注意更新的顺序是不能更换的!)
4.最后pPrev会指向反转后的链表的第一个元素,所以它是反转链表的head指针,返回它即可。
利用代码实现上述过程就能通过这道题,下面给出我用递归以及非递归方式的实现代码。
代码
我的代码:递归实现
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) { return reverse(head, nullptr); } ListNode* reverse(ListNode* pCur, ListNode* pPrev) { if (pCur) { ListNode* pNext = pCur->next; pCur->next = pPrev; return reverse(pNext, pCur); } else return pPrev; }};
我的代码: 非递归实现
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pPrev = nullptr; ListNode* pCur = head; ListNode* pNext = nullptr; while (pCur) { pNext = pCur->next; pCur->next = pPrev; pPrev = pCur; pCur = pNext; } return pPrev; }};
总结
这道题不难,只要能细心处理好指针,理清指针变换的顺序就基本没有什么问题。关于链表的题目,重要的都是处理好指针的操作。
完成今天的坑,最近事好多,坚持一天至少一个坑,有时间会尽量多填,加油吧!
0 0
- [leetcode] 206. Reverse Linked List 解题报告
- LeetCode 206. Reverse Linked List 解题报告
- [Leetcode] 206. Reverse Linked List 解题报告
- [LeetCode]Reverse Linked List II, 解题报告
- [LeetCode]Reverse Linked List II解题报告
- 【LeetCode】Reverse Linked List II 解题报告
- LeetCode-Reverse Linked List-解题报告
- [LeetCode] Reverse Linked List II 解题报告
- 【LeetCode】Reverse Linked List 解题报告
- 【LeetCode】206.Reverse Linked List(Easy)解题报告
- Reverse Linked List 解题报告
- [leetcode] 92. Reverse Linked List II 解题报告
- [Leetcode] 92. Reverse Linked List II 解题报告
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告
- LeetCode — Linked List Cycle 解题报告
- [LeetCode OJ] Linked List Cycle 解题报告
- LeetCode-Palindrome Linked List-解题报告
- 【LeetCode 234】Palindrome Linked List 解题报告.
- Directory Listing For解决方法-tomcat启动,首页报错
- hdu 5512 Pagodas gcd()
- [总结]视频质量评价技术零基础学习方法
- java,linux转义字符区别
- 人脸检测——Faster R-CNN
- LeetCode 206. Reverse Linked List 解题报告
- 更改NavigationView侧滑菜单文字颜色
- laravel框架 即点即改
- poj 3984 迷宫问题(BFS+路径输出)
- 析构函数
- Android自动更新:这里的更新静悄悄~
- 定时器
- Android 自定义listview的下拉刷新
- ECMAScript 6 学习笔记----对象的扩展