繁体   English   中英

这个链式分配有什么问题?

[英]What is the problem with this chained assignment?

我正在做以下 LeetCode 练习

class ListNode:
     def __init__(self, val=0, next=None):
         self.val = val
         self.next = next

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if l1 and l2:
            if l1.val < l2.val:
                temp = head = ListNode(l1.val)
                l1 = l1.next
            else:
                temp = head = ListNode(l2.val)
                l2 = l2.next
            while l1 and l2:
                if l1.val < l2.val:
                    temp = temp.next = ListNode(l1.val)
                    #temp.next = temp = ListNode(l1.val)
                    l1 = l1.next
                else:
                    temp = temp.next = ListNode(l2.val)
                    #temp.next = temp = ListNode(l2.val)
                    l2 = l2.next
       ...

我的问题是为什么temp = temp.next = ListNode(l1.val)temp = temp.next = ListNode(l2.val)行不起作用,而它们正下方的注释行起作用?

它们的含义根本不同:

temp = temp.next = ListNode(l1.val)

相当于:

_node = ListNode(l1.val)
temp = _node
temp.next = _node

然而

temp.next = temp = ListNode(l1.val)

相当于:

_node = ListNode(l1.val)
temp.next = _node
temp = _node

第二个将当前temp节点的next属性分配给一个新节点,然后将temp设置为新节点,这是正确的行为。 第一个将temp设置为新节点,然后将其next属性设置为自身,这是不正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM