首页 > 其他 > 详细

反转链表

时间:2019-10-11 21:20:32      阅读:94      评论:0      收藏:0      [点我收藏+]

题目:输入一个链表,反转链表后,输出新链表的表头。

这道题可以画一个链表,反转后的链表其实是将每个箭头的方向翻转过来,再让原来的头节点指向空,即可。怎样实现呢?

我们可以通过两个指针来实现,第一个指针a指向头节点,第二个指针b指向a的下一个节点,然后翻转箭头的实现就是让b指向a,也就是b的下一个节点为a。但是这样只翻转了一个箭头,我们要将所有的箭头都翻转过来,因此,让a往前走一步,b也往前走一步,然后继续翻转即可。那么怎么往前走呢,这里需要定义一个辅助的指针c,让c指向b的下一个节点,然后a走到b的位置,b走到c的位置,就好了。整个过程一直持续到b所指的节点为最后一个节点,所以当b所指的节点不为空时,一直循环。

当跳出循环后,因为原来的头节点翻转后变成了最后一个节点,所以还要让原来的头节点指向空。跳出循环后,a指针指向原链表最后一个节点,也就是新链表的头节点,所以返回a指针所指的节点,就得到了反转后的链表。

c++代码如下:

 1 class Solution {
 2 public:
 3     ListNode* ReverseList(ListNode* pHead) {
 4         if(!pHead) return pHead;
 5         auto a = pHead, b = a->next;
 6         while(b){
 7             auto c = b->next;
 8             b->next = a;
 9             a = b;
10             b = c;
11         }
12         pHead->next = nullptr;
13         return a;
14     }
15 };

 

反转链表

原文:https://www.cnblogs.com/hellosnow/p/11656688.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!