class Solution:
def reverseList(self, head:ListNode) -> ListNode:
cur, pre = head, None
while cur:
cur.next, pre, cur = pre, cur, cur.next
return pre
需要注意的的是python的连续赋值,右侧全是中间变量
cur.next, prev, cur = prev, cur, cur.next
请注意python的连续变量赋值与下面的等式不等价
cur.next = prev
prev = cur
cur = cur.next
测试代码
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __str__(self):
return 'val:%d' % self.val
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur, pre = head, None
while cur:
cur.next, pre, cur = pre, cur, cur.next
return pre
if __name__ == '__main__':
a = ListNode(1)
b = ListNode(2)
c = ListNode(3)
d = ListNode(4)
# 构造一个简单链表
a.next, b.next, c.next = b, c, d
p = a
while (p):
print(p.val)
p = p.next
print("----------------")
p = Solution().reverseList(a)
while (p):
print(p.val)
p = p.next
运行结果
初始状态:
1 -> 2 -> 3 -> NULL
cur prev
循环一次 :
1 -> NULL // cur.next = pre
cur pre
1 -> NULL // pre = cur
pre
2 -> 3 -> NULL // cur=cur.next=2
cur
循环第二次:
2 -> (1 -> NULL) // cur.next=pre
cur pre
2 -> 1 -> NULL // pre = cur
pre
3 -> NULL //cur=cur.next=3
cur//
循环第三次:
3 -> (2 -> 1 -> NULL) // cur.next = pre
cur
3 -> 2 -> 1 -> NULL // pre = cur
pre
NULL //cur = cur.next=None
cur