当前位置:   article > 正文

反转链表(分步讲解三指针法)_三个指针反转链表

三个指针反转链表

leetcode-206.   反转一个单链表

这里我们用到的方法是三指针法。

1.首先创建3个指针,分别指向头结点,头结点的前一个结点,头结点的下一个结点

 

 

 2.转变指针的方向,即将P2指向P1这样我们就可以将左边的看作一个新的链表,头结点为1,指向NULL

 

3.这时候我们移动P1,使P1=P2,将P1作为头结点,方便下一次的P2转向

 

 

4.挪动P2指针,为下一次转变指针方向做准备(这里就可以看出P3的作用是使右边的链表不至于丢失,为P2提供了下一次挪动的地址)

 

 

5.P3完成了使命,继续往前走,循环。上几步的操作

 

 

 6.大体思路就是这样,我们要注意的是到最后走到NULL时停下来的控制。

下图是走到后面的场景,我们可以看到此时P3和P2都走到了最后,我们要做的就是让循环停在这里,所以我们的循环条件就是P2!=NULL。为什么不是P3呢,因为P3是先走到NULL值之后P2才改变了方向走到NULL的。

 

 

7.最后因为只有P1在头结点,所以返回P1

下面是具体的代码

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * struct ListNode *next;
  6. * };
  7. */
  8. struct ListNode* reverseList(struct ListNode* head) {
  9. struct ListNode *pre = NULL; // P1指针
  10. struct ListNode *cur = head; //P2指针
  11. while(cur)
  12. {
  13. struct ListNode *next = cur->next; ///P3指针
  14. cur->next = pre; //这一步很重要:反转
  15. pre = cur;
  16. cur = next;
  17. }
  18. return pre; //返回P1
  19. }

 运行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/1016835
推荐阅读
相关标签
  

闽ICP备14008679号