[英]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
值之間存在差異?
在第一次迭代中(僅) dummy
和tail
引用同一個對象。 因此,當tail.next
被分配一個節點(如list1
或list2
)時,這會影響tail
和dummy
引用的對象。
但隨后tail = tail.next
被執行,這使得tail
引用與dummy
引用不同。
每一步都修改了新變量,不是也修改了舊變量嗎?
不,我們應該區分對名稱的賦值與改變名稱所引用的對象。 第一個看起來像tail =
,第二個看起來像tail.next =
。
分配給一個名稱永遠不會改變另一個名稱所引用的內容。 所以第一次tail = tail.next
被執行,是tail
和dummy
離開的時候。 在這個程序中, dummy
永遠不會“移動”:它一直在引用 dummy 節點。 但是tail
會離開它,總是引用最近創建的節點。
另請參見合並兩個鏈表的可視化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.