leetcode 206 链表反转 python

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值