【问题标题】:Do the dots in linked lists represent nodes or pointers from one node to another?链表中的点代表节点还是从一个节点到另一个节点的指针?
【发布时间】:2021-04-04 16:56:42
【问题描述】:

我有以下代码可以反转链表(我知道它是正确的)。我对链表比较陌生,我对代码本身有一些疑问:

 def reverseList(self, head: ListNode) -> ListNode:
    if head == None:     
        return None
    if head.next == None:     
        return head             

    prev = head
    curr = head
    nex = head.next      

    while nex:                
        curr = nex            
        nex = nex.next        
        curr.next = prev      
        prev = curr
    head.next = None

    return curr

我了解与两个“if”语句相关的代码。 问题:

  1. 'prev' 和 'curr' - 我说这些是指针对吗?
  2. 'nex = head.next' 中的 'head.next' 指的是 head 之后的节点,还是从 head 指向下一个节点的指针?

(另外,什么是“指针”——这是将一个节点连接到链表中的另一个节点吗?——我理解链表,它只是我想要弄清楚的代码中的引用)

在while语句中:

  1. 我们执行 'curr = nex' 将 curr 指针从 head 移动到 nex (=head.next) - 我读对了吗?
  2. 'nex = nex.next' 这是做什么的,我们是简单地将 nex 分配给 nex.next ,还是我们建立从 head 之后的节点到该节点之后的节点的连接/地址?

while 循环中的代码我很难理解,如果有人可以解释一两行可能真的很有帮助,因为我认为大多数都具有相同的含义。非常感谢

【问题讨论】:

    标签: python linked-list


    【解决方案1】:

    Python 并没有像 C 这样的语言那样真正拥有与“值”不同的“指针”概念。准确地说 Python 中的 每个 变量都是一个“指针”,因为 Python 中的变量总是对对象的引用;重新分配变量不会更改底层对象(而是将其重新分配为指向其他对象)。

    'prev' 和 'curr' - 我说这些是指针对吗?

    根据上述免责声明——是的。

    'nex = head.next'中的'head.next'指的是head之后的节点,还是从head指向下一个节点的指针?

    两者兼而有之。说head.next“指向”head 之后的节点,相当于说它“指向”下一个节点。是同一个概念。

    (另外,什么是“指针”——这是将一个节点连接到链表中的另一个节点吗?——我理解链表,它只是我想要弄清楚的代码中的引用)

    指针是“指向”的东西,与“引用”或“连接”相同。

    我们使用 'curr = nex' 将 curr 指针从 head 移动到 nex (=head.next) - 我读对了吗?

    是的;当您使用赋值操作 (=) 重新分配变量时,该变量现在指向您刚刚分配给它的东西。

    'nex = nex.next' 这是做什么的,我们是将 nex 分配给 nex.next ,还是我们建立从 head 之后的节点到该节点之后的节点的连接/地址?

    变量nex 被重新分配为指向nex.next 指向的任何内容。在链接列表的上下文中,这意味着您将nex 指针在列表中向前移动一位。

    【讨论】:

    • 您好 Samwise,感谢您的 cmets,他们非常有帮助。请再问一个问题;在我们有 "curr.next = prev" 的那一行;这个 curr 之前被分配给 nex (curr = nex) 并且 nex 之前被分配给 head.next 但后来 nex 也被分配给 nex.next ;我是否正确假设“curr.next”中的 curr 指的是 curr=nex=head.next?
    • 老实说,我有点难以理解你刚刚问的内容,但是每当你做一个作业时,你所做的就是让左边的东西指向右边的东西当前的任何对象指着。这里的所有都是它的。 :) 如果您发现自己感到困惑,请在代码中添加一些打印语句,以帮助您跟踪不同时间点到什么,在纸上画一些图片等。
    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多