当前位置:   article > 正文

数据结构-反转链表问题_p1->next =p2

p1->next =p2

   对于这样的链表,进行反转,我们首先考虑用两个指针的方法

 此时,我们令p1=head;p1->next=p2;

然后,我们试着去反转的时候,令p1->next=NULL;p2->next=p1;可是在这个时候,p2->next指向了p1,找不到下一个节点了,也就是说,链子在这里断掉了,而如果想让链子不断,我们可以想到,定义一个p3,使p3等于p2->next,这样,我们可以令p1=p2;p2=p3;而p3本来就连接着后面的节点,令p3=p3->next就可以了。

 那么,当我们理清这个思路的时候,我们可以看出来,p3只是起到一个好像路标一样的作用,在反转的过程中,一直是将p2->next指向到p1,那么判定结束必须要p2->next=NULL;才行。

实际执行中,我们如果让p1=head的时候,我们要判定p1->next不是空指针,还要判断p2->next不是空指针,有点麻烦,可以先让p1=NULL,在循环中完成使head->next=NULL,充分利用循环。

  1. struct ListNode* reverseList(struct ListNode* head)
  2. {
  3. struct ListNode* p1=NULL;
  4. if(!head)
  5. {
  6. return NULL;
  7. }
  8. struct ListNode*p2=head;
  9. struct ListNode*p3=p2->next;
  10. while(p2)
  11. {
  12. p2->next=p1;
  13. p1=p2;
  14. p2=p3;
  15. if(p3)
  16. {
  17. p3=p3->next;
  18. }
  19. }
  20. return p1;
  21. }

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

闽ICP备14008679号