簡體   English   中英

使用 Pythonic 變量交換迭代地反轉鏈表

[英]Reversing a linked list iteratively with Pythonic variable swapping

當我遇到一些我無法解釋的事情時,我只是在練習一些鏈接列表問題。 所以我想知道是否有人可以幫助我。

如果我有一個鏈接列表,其節點實現如下

class Node:
    def __init__(self, val, next):
        self.val = val
        self.next = next

我最初嘗試像這樣反轉鏈接列表,它提出了一個AttributeError: 'NoneType' object has no attribute 'next'

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

然后我將它修改為並且它有效,但我似乎無法圍繞它。

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

我知道 Python 將 RHS 評估為一個元組,然后從左到右分配 LHS 上的值,但我似乎無法理解為什么兩個代碼片段在這種情況下不會相同。

您可能希望通過以下方式可視化事物:

您的第一個代碼相當於:

prev = None
curr = head
while curr:
    tmp = curr, curr.next, prev
    prev = tmp[0]
    curr = tmp[1]
    curr.next = tmp[2]

而您的第二個代碼相當於:

prev = None
curr = head
while curr:
    tmp = prev, curr, curr.next
    curr.next = tmp[0]
    prev = tmp[1]
    curr = tmp[2]

您會看到不同之處在於,在一種情況下,您首先更改curr然后分配給curr.next ,而在另一種情況下,您首先更改curr.next然后重新分配curr

python 不並行執行任何操作。

它必須選擇一個從左到右的順序來分配變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM