это связано с проблемой, с которой я столкнулся, пытаясь решить обратную проблему связанного списка.
Сначала позвольте мне добавить некоторые предварительные коды для определения связанного списка и быстрый метод создания связанного списка:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __repr__(self):
if self.next:
return "{}->{}".format(self.val, repr(self.next))
else:
return "{}".format(self.val)
def genNode(*nodes, end=None):
if len(nodes) == 1 and type(nodes[0]) == list:
nodes = nodes[0]
for i in nodes[::-1]:
n = ListNode(i)
n.next, end = end, n
return n if nodes else None
Проблема, с которой я столкнулся, заключается в том, что я обнаружил, что механизм подкачки все еще зависит от последовательности переменной, которую я пишу.
Первоначально, когда мы говорим о подстановке значений в python, мы можемdo:
a, b = b, a
и он должен работать точно так же, если у меня есть
b, a = a, b
Этот метод обратного связанного списка, который я пытаюсь написать, имеет перестановку 3 переменных, идея проста, чтобы создать фиктивную головку и последовательно добавлять узлы между dummy и dummy.next, чтобы ее можно было перевернуть.
def rev(head):
dummy = ListNode('X')
while head:
dummy.next, head.next, head = head, dummy.next, head.next
return dummy.next
a = genNode(1,2,3,4)
print(rev(a)) # >>> 4->3->2->1
Но если я слегка переключу последовательность из 3 переменных:
def rev2(head):
dummy = ListNode('X')
while head:
dummy.next, head, head.next, = head, head.next, dummy.next,
return dummy.next
a = genNode(1,2,3,4)
print(rev2(a)) # >>> AttributeError: 'NoneType' object has no attribute 'next'
Так что похоже, что здесь имеет значение последовательность, и может кто-нибудь дать мне знать, как python оценивает значения подкачки, если существует более 2 переменных.
Спасибо!