反转链表(python)
一,问题描述:
输入一个链表,反转链表后,输出新链表的表头。
二,代码
三,代码分析
我们一行一行来看这些代码究竟做了什么
首先,
left=pHead
mid=pHead.next
right=mid.next
这三行定义了三个指针,分别指向如图
本题代码中的“=”可以看作一个箭头,意为“指向”
left.next=None 这行代码干掉了链表第一项指向第二项的指针,使其为空
while right!=None:
mid.next=left
left=mid
mid=right
right=right.next
代码中的这个while循环 是有执行顺序的,他干了这些事,如图:
首先,mid.next=left这行代码让原本第二项指向第三项的指针指到了第一项上
接着
left=mid
mid=right
right=right.next
这三行代码让三个指针分别往右平移了一格,如图:
一个while结束,此时判断right是否指到了None上,若没有,则再来一个循环。如图:
此时我们看到right指到了None上,于是跳出while循环,执行代码mid.next=left,它让最后一项指向None的指针指向了第四项
如图:
最后,执行return mid,返回mid此时所指的数,即为所求结果
ps:还有一件事
if not pHead:
return#如果pHead是空的,就返回空
if pHead.next==None:
return pHead#如果pHead的第二项为空,则返回第一项,如图:
如果第三项是空的,则跳过while循环,直接执行
mid.next=left
return mid
输出mid所指的数即为最终结果