剑指offer JZ15:反转链表
问题
输入一个链表,反转链表后,输出新链表的表头。
思路
非常基础的链表题,几乎所有学习链表的程序员都会在一开始学习这个算法。
大思路就是运用三个变量存储上一个,现在和下一个链表,然后将现在的next指向上一个链表,在更新三个变量。
唯一需要注意的是,当while循环结束时(也即是curnode到达了链表尾),此时curnode.next并没有被指向lastnode,需要在后面加上。
代码及解释
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return pHead
curnode = pHead
lastnode = None
nextnode = pHead.next
while curnode.next:
curnode.next = lastnode
lastnode = curnode
curnode = nextnode
nextnode = curnode.next
curnode.next = lastnode
return curnode