反转链表
问题
输入一个链表,反转链表后,输出链表的所有元素(函数返回头节点即可)。
分析
如下面所示,有三个指针,此时,让2的next指向1进行反转,然后指针2移动到3的位置,指针1移动到2的位置,指针3后移,继续进行反转,直到指针3指向为空时再进行最后一次反转。
更简单来说只要两个指针,交换之前,先临时开辟第3个指针指向2的下一个,然后2的next指向1,2指向3,1指向2,完成一次循环。
需注意代码鲁棒性,考虑到头节点指针为空、只有1个节点即头节点的两种特殊情况。
class Solution:
def ReverseList(self,pHead):
# 判断头结点为None或者只有头结点的情况
if not (pHead and pHead.next):
return pHead
pre = pHead
Head = pHead.next
while (Head):
# 先把Head.next保存起来
nextnode = Head.next
# Head指针转换
Head.next = pre
# pre指针右移
pre = Head
# head指针右移
Head = nextnode
return pre
注: 这里代码有一点点小问题,