您的位置:首页 > 编程语言 > Python开发

leetcode 206 链表反转 python

2019-07-08 10:21 435 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_24146957/article/details/95044598
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: