当前位置:   article > 正文

链表反转(C++版)_6-4 翻转链表(c++版)

6-4 翻转链表(c++版)

题目:

实现一个链表反转的算法,注意算法的鲁棒性。

注:

链表结点的定义如下:

struct ListNode {
int val;
struct ListNode *
next;
ListNode(int x) :val(x), next(NULL) {}
};
  

直接上代码:

  1. ListNode* ReverseList(ListNode* pHead)
  2. {
  3. // 如果链表为空或者只有一个结点 直接返回即可。
  4. if(pHead == NULL || pHead->next == NULL)
  5. {
  6. return pHead;
  7. }
  8. // 定义相邻3个辅助结点指针
  9. // p 指向待处理的结点
  10. // q 指向待处理的结点的下一个结点
  11. // r 指向当前已处理完毕的结点
  12. ListNode *p = pHead, *q = pHead->next, *r = pHead;
  13. p->next = NULL;
  14. p = q;
  15. while(p)
  16. {
  17. q = p->next; // 保存待处理结点的下一个结点
  18. p->next = r; // 链接到上一个结点
  19. r = p; // 当前结点已处理完毕 更新
  20. p = q; // 更新待处理的结点
  21. }
  22. return r;
  23. }

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

闽ICP备14008679号