版权声明:本文为博主原创文章,转载请附上本博文链接。 https://blog.csdn.net/weixin_41704182/article/details/87423818
原链表:phead->1->2->3->4->None
新链表:new->None
单链表反转的实现过程:
-
反转第一个节点,防止在反转过程中由于节点1和节点2断开后找不到节点2,所以先将原链表的第二个节点保存在temp中。
temp = phead.next
结果:phead->1 ; temp->2->3->4->None
-
将原链表的第一个节点变为新链表的最后一个节点。
phead.next = newhead
结果:phead->1->None ; temp->2->3->4->None
-
将newhead重新链接新链表
newhead = phead
结果:newhead->1->None ; temp->2->3->4->None
-
为了下一次反转,需要将phead重新链接原链表
phead = temp
结果:newhead->1->None ; phead->2->3->4->None
-
按此步骤不断反转下一个节点
class Lnode:#d定义节点
def __init__(self,x):
self.val=x
self.next=None
def Reverse(phead):
if phead or phead.next is None: #判断是否为空表
return phead
newhead = None #建立新链表
while phead:
temp = phead.next #先将原链表的第二个节点保存在temp中
phead.next = newhead #将原链表的第一个节点变为新链表的最后一个节点
newhead = phead
phead = temp
return newhead
if __name__ == '__main__':
phead = Lnode(1)#建立链表1->2->3->None
p1 = Lnode(2)
p2 = Lnode(3)
phead.next = p1
p1.next = p2
p = Reverse(phead)
while p:
print(p.val)
p = p.next