перевернуть связанный список с несколькими назначениями - не все ли задания назначений работают? - PullRequest
2 голосов
/ 28 марта 2020

точно так же, как Реверсирование LinkedList с множественным присваиванием

, но если вы попытаетесь:

pre, node, node.next = node, node.next, pre

, это не сработает ! (получение NoneType не имеет атрибута следующего)

оба:

pre, node.next, node = node, pre, node.next

и

node.next, pre, node = pre, node, node.next

работа , почему верхний не так? Я думал, что множественное назначение освобождает меня от необходимости думать о правильном порядке (или думать вообще:)


РЕДАКТИРОВАТЬ:

Я сужу его:

if node:
   node.next, node = None, node.next
   #node, node.next = node.next, None # comment the previous line and uncomment this - boom!

Я всегда думал, что эти строки эквивалентны ...

1 Ответ

2 голосов
/ 31 марта 2020

Проблема в том, что одна из ваших принимающих переменных выполняет косвенное обращение, основанное на присваиваемом значении. Логика множественных назначений c избавляет вас от необходимости думать о правой стороне, поскольку она автоматически создает временное хранилище для исходных значений. Однако это не относится к левой стороне назначения.

Таким образом, порядок, в котором присваивается node, имеет значение из-за присвоения node.next.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...