反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解题思路
很经典的问题,首先设置pre,cur,lat
三个指针
pre cur lat
null 1 -> 2 -> 3 -> 4 -> 5 -> null
接着cur.next = pre
pre cur lat
null <-1 2 -> 3 -> 4 -> 5 -> null
接着pre = cur
,cur = lat
,lat = lat.next
pre cur lat
null <-1 2 -> 3 -> 4 -> 5 -> null
重复上述操作直到lat=None
。
pre cur lat
null <-1 <- 2 <- 3 <- 4 5 -> null
最后cur.next = pre
即可。
class Solution:
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
pre = None
cur = head
lat = head.next
while lat != None:
cur.next = pre
pre = cur
cur = lat
lat = lat.next
cur.next = pre
return cur
我们再回过头来看上述代码,这个代码其实有一个重大的bug
。如果head=None
,那么lat = cur.next
就会出问题。
其实我们可以这样写
class Solution:
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
pre = None
cur = head
while cur != None:
lat = cur.next
cur.next = pre
pre = cur
cur = lat
return pre
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!