Python 链表的歧义问题求助

binxin 10天前 5

比如下面这个定义 class ListNode: def init(self, val=0, next=None): self.val = val self.next = next

遇到一个特别头疼的问题是,p.next 在代码中可能有歧义(或者是我理解不到位):

  1. 它可能是指 p 这个 ListNode 的 self.next,偶尔我想修改它
  2. 它可能是指 p 这个 ListNode 的下一个节点(具体内容)

结果我连一个交换链表节点都做不好.......

最新回复 (14)
  • Jirajine 8天前
    引用 2
    有类型在,没有歧义。
    p 是 ListNode[T],p.val 是 T 。
    p.next 是 ListNode[T],p.next.val 是 T 。
  • Trim21 8天前
    引用 3
    不应该是具体内容啊,如果是具体内容,你怎么访问下一个节点的下一个节点呢。
    想修改下一个节点的内容应该修改 p.next.val
  • Hstar 8天前
    引用 4
    什么玩意?建议重修
  • renmu123 8天前
    引用 5
    p.next=p.next.next
  • 楼主 binxin 8天前
    引用 6
    @renmu123
    嗯嗯,就比如这位老师的例子:p.next=p.next.next,
    等号右边是 p.next.next,那么它的前半部分,p.next 应该是指 p 这个节点的 next 指针,但是 p 这个节点的 next 指针是没有 next 属性的,得它指向的对象才有 next,也就是等号右边的 p.next.next 中的“p.next”,其实代表的是 p 的下一个节点整体内容,这个和左边的 p.next 不是一个含义。

    所以我是哪里理解错了呢?
  • renmu123 8天前
    引用 7
    @binxin #5 p1=Node(1), p2=Node(2), p3=Node(3) p1.next=p2 p2.next=p3 。 这时候链表就是:p1=>p2=>p3 。这时候 p1.next.next=p3 。如果 p1.next=p3,那么现在链表就是 p1=>p3 。p2 在链表中已经没有了。
  • maocat 8天前
    引用 8
    p.next = p.next.next if p.next else None
  • JeffGe 8天前
    引用 9
    Python 没有指针的概念,Python 所有变量都是对被右值的引用
  • JeffGe 8天前
    引用 10
    @JeffGe 多打了个“被”
  • 楼主 binxin 8天前
    引用 11
    @maocat
    我说下我的理解:
    1. Python 没有指针的概念,Python 所有变量都是对被右值的引用意味着:p1.next=p2 中的 p1.next 其实是指 p2 这个 node,或者说 p1.next 是 p2 的引用?
    2. 那么在 p1.next = p3 的时候,其实不是把 p1 的 next 属性改成了 p3,而是把 p2 这个 node 改成了 p3,所以我哪里还是理解错了是么?
  • iConnect 8天前
    引用 12
    只是使用的话,建议去 github 上找现成的各种链表实现,久经考验的轮子比自己写靠谱的多。如果不能满足需求,自己写或者研究用途另说
  • 楼主 binxin 8天前
    引用 13
    @iConnect
    LC 第 24 、25 题卡壳中。。。。
  • JeffGe 8天前
    引用 14
    https://medium.com/@daniel.tooke/variables-and-memory-addresses-in-python-6d96d672ed3d
  • geebos 8天前
    引用 15
    理解成引用就好了,不要把 next 理解成对象,事实上 next 确实是引用而不是指针
  • 游客
    16
返回