当前位置:   article > 正文

反转单链表的两种最简方法,时间复杂度O(n),空间复杂度O(1)(C语言)_反转链表 复杂度

反转链表 复杂度

我用的是带有头结点的单链表作为演示。

方法一:先看图

第一步:段链,在图示位置将链表分成两个,用指针P作为第二段链表表头,并将1中指针域next制空(可以创建临时指针R进入1中)。

第二步:在图示位置依次执行插入操作(头插法)

第三步:进入循环,PQR三指针如影随形,Q是P的影子,R是Q的影子 

代码如下:

  1. int Reverse_lian(Link L) {
  2. Link P=L;
  3. P = P->next;
  4. Link R = P;
  5. P = P->next;
  6. R->next = NULL;
  7. Link Q = L;
  8. while (P) {
  9. L->next = P;
  10. Q = P;
  11. P = P->next;
  12. Q->next = R;
  13. R = Q;
  14. }
  15. return OK;
  16. }

方法一的优点是简单易懂,好理解缺点是需要单独处理一下1所在区域,略显繁琐

方法二:

思想和方法一相同,不过法二直接在head指针和1之间断开,借助head指针的next域作为中间量直接进行插入操作,无需单独处理1

代码如下:

  1. int Reverse_lian_s(Link L) {
  2. Link P=L->next;
  3. L->next = NULL;
  4. Link Q = P;
  5. while (P)
  6. {
  7. P = P->next;
  8. Q->next = L->next;
  9. L->next = Q;
  10. Q = P;
  11. }
  12. return OK;
  13. }

优点代码量少,简洁高效,缺点不好想

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

闽ICP备14008679号