簡體   English   中英

合並兩個排序列表。 對python中“=”運算符的工作感到困惑

[英]Merge Two Sorted Lists. confused about working of "=" operator in python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        dummy=ListNode()
        tail=dummy
        while list1 and list2:
            if list1.val<list2.val:
                tail.next=list1
                list1=list1.next
            else:
                tail.next=list2
                list2=list2.next
            tail=tail.next
        if list1:
            tail.next=list1
        elif list2:
            tail.next = list2
        return dummy.next

=運算符不會創建一個新對象,它只會創建一個共享原始對象引用的新變量。

  • 為什么dummy.next值和tail.next值之間存在差異?

  • 每一步都修改了新變量,不是也修改了舊變量嗎?

為什么dummy.next值和tail.next值之間存在差異?

在第一次迭代中(僅) dummytail引用同一個對象。 因此,當tail.next被分配一個節點(如list1list2 )時,這會影響taildummy引用的對象。

但隨后tail = tail.next被執行,這使得tail引用與dummy引用不同。

每一步都修改了新變量,不是也修改了舊變量嗎?

不,我們應該區分對名稱的賦值改變名稱所引用的對象。 第一個看起來像tail = ,第二個看起來像tail.next =

分配給一個名稱永遠不會改變另一個名稱所引用的內容。 所以第一次tail = tail.next被執行,是taildummy離開的時候。 在這個程序中, dummy永遠不會“移動”:它一直在引用 dummy 節點。 但是tail會離開它,總是引用最近創建的節點。

另請參見合並兩個鏈表的可視化

暫無
暫無

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

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