头插法将单链表原地逆转

Posted halo-zyh-go

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了头插法将单链表原地逆转相关的知识,希望对你有一定的参考价值。

如果你看到标题就知道我在说什么,那么出门左拐,自己动手写一下伪代码。
只有自己亲手写出和画出,才能更好的掌握。

技术图片

现在有一个链表,Head指向头

技术图片

然后使用temp保存Head中原来含有的结点的第一个结点,此时p指向第一个待插入结点

此时将head尾部置空

技术图片

将 p 加入head头部,然后 p 后移一位。往复多次,直到 p 空

1     def reverse(self):              #头插法原地逆转链表
2         p = self.head               #p指向工作结点
3         self.head = None            #将头指针看做一个空空的干净的头指针
4         while p:
5             temp = self.head        #保存头指针已经保存了的后续结点的第一个结点
6             self.head = p           #将新结点头插法接到头指针上  之后的步骤不能反过来哦,否则结果不是预期的结果
7             p = p.Next              # STEP 1 :先将工作指针 p 后移到下一位
8             self.head.Next = temp   # STEP 2 :然后再把原来的 head 的后面的结点 temp 连接到新加入的结点后面
9 #注:STEP 1 和STEP 2 务必不要颠倒  因为如果先执行 self.head.Next = temp 那么 p 的next就会变成 temp 是吧(你品品)

以上是关于头插法将单链表原地逆转的主要内容,如果未能解决你的问题,请参考以下文章

C++练习 | 不使用头插法逆转单链表

单链表的头插法与尾插法代码实现及详解

博客第二天——头插法建立单链表

每天学习亿点点系列——单链表OJ题

王道数据结构 单链表 头插法

链表习题-将两个递增单链表合并成一个递减单链表