我正在练习Swap Nodes in Pairs 中的一个问题。根据以下代码,是否有人将我的作业放在单独的行而不是一行中,为什么结果会有所不同?
class Solution:
def swapPairs(self, head):
prev, prev.next = self, head
while prev.next and prev.next.next:
a = prev.next
b = a.next
prev.next, b.next, a.next = b, a, b.next #what is difference if i seperate this line into following 3 statement?
# prev.next = b
# b.next = a
# a.next = b.next
prev = a
return self.next
答案 0 :(得分:1)
单行版本会在内存中创建一个临时元组,因此它是一种功能:
tmp1 = b
tmp2 = a
tmp3 = b.next
prev.next = tmp1
b.next = tmp2
a.next = tmp3
像在第二个示例中一样将其拆分时,最终要重新分配b.next
,然后在分配之后读取它,因此其值已经改变了...
prev.next = b
b.next = a.next # <-- overwrites b.next
a.next = b.next # <-- reads that new value back
这就是为什么您通常不能通过执行以下操作交换两个变量的原因:
a=b # <-- overwrites a
b=a # <-- reads that value back
但是您可以(至少在Python中)可以做到:
a,b = b,a
答案 1 :(得分:0)
您从序列开始
encrypt
第一条语句正确地将中间对替换为
prev -> a -> b -> b.next
这是因为对整个右侧进行了评估,并将其打包到一个元组中,然后再对左侧进行任何赋值。
顺序分配结束设置
prev -> b -> a -> b.next
之所以会这样,是因为仅在分配prev -> b -> a -> a
之后才评估最后一个分配a.next = b.next
。此时,b.next = a
是b.next
。
不使用临时变量的正确分配可以按以下顺序进行:
a