Проблема с распаковкой кортежа при реверсировании связанного списка с использованием распаковки кортежа в Python [дублик ⇐ Python
Проблема с распаковкой кортежа при реверсировании связанного списка с использованием распаковки кортежа в Python [дублик
Реверсирование связанного списка Leetcode-206
Первоначальный подход:
класс ListNode: def __init__(self, val=0, next=None): self.val = значение self.next = следующий defverseList(self, head: Необязательно[ListNode]) -> Необязательно[ListNode]: предыдущая = Нет пока голова: # print("-",prev,head) temp_nxt = head.next head.next = предыдущая предыдущая = глава голова = temp_nxt # print("=",предыдущая,голова) вернуть предыдущую Я столкнулся с неожиданной проблемой, когда пытался написать этот код с использованием присваивания кортежей/параллельного присваивания в Python. Назовем это Метод-1
.
prev, head, head.next = head, head.next, prev Я получаю сообщение об ошибке, и результат не соответствует ожиданиям.
AttributeError: объект «NoneType» не имеет атрибута «следующий» ^^^^^^^^^ предыдущая, глава, голова.следующая = глава, голова.следующая, предыдущая Выход: [1,2,3]
- Нет ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: None}}} = ListNode{значение: 1, следующий: ListNode{значение: 2, следующий: Нет}} ListNode{значение: 2, следующий: Нет} - ListNode{значение: 1, следующий: ListNode{значение: 2, следующий: Нет}} ListNode{значение: 2, следующий: Нет} Однако, когда я использую следующий код, он работает нормально: Метод 2
prev, head.next, head = head, prev, head.next Выход: [1,2,3]
- Нет ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: None}}} = ListNode{значение: 1, следующий: нет} ListNode{значение: 2, следующий: ListNode{значение: 3, следующий: нет}} - ListNode{значение: 1, следующий: нет} ListNode{значение: 2, следующий: ListNode{значение: 3, следующий: нет}} = ListNode{значение: 2, следующий: ListNode{значение: 1, следующий: Нет}} ListNode{значение: 3, следующий: Нет} - ListNode{значение: 2, следующий: ListNode{значение: 1, следующий: Нет}} ListNode{значение: 3, следующий: Нет} = ListNode{значение: 3, следующий: ListNode{значение: 2, следующий: ListNode{значение: 1, следующий: Нет}}} Нет Мне трудно понять, почему первый подход вызывает проблему.
Может ли кто-нибудь объяснить причину этого и предложить решение или обходной путь? Кроме того, мы будем очень признательны за любую информацию о том, как работает назначение кортежей в этом контексте. Спасибо!
Реверсирование связанного списка Leetcode-206
Первоначальный подход:
класс ListNode: def __init__(self, val=0, next=None): self.val = значение self.next = следующий defverseList(self, head: Необязательно[ListNode]) -> Необязательно[ListNode]: предыдущая = Нет пока голова: # print("-",prev,head) temp_nxt = head.next head.next = предыдущая предыдущая = глава голова = temp_nxt # print("=",предыдущая,голова) вернуть предыдущую Я столкнулся с неожиданной проблемой, когда пытался написать этот код с использованием присваивания кортежей/параллельного присваивания в Python. Назовем это Метод-1
.
prev, head, head.next = head, head.next, prev Я получаю сообщение об ошибке, и результат не соответствует ожиданиям.
AttributeError: объект «NoneType» не имеет атрибута «следующий» ^^^^^^^^^ предыдущая, глава, голова.следующая = глава, голова.следующая, предыдущая Выход: [1,2,3]
- Нет ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: None}}} = ListNode{значение: 1, следующий: ListNode{значение: 2, следующий: Нет}} ListNode{значение: 2, следующий: Нет} - ListNode{значение: 1, следующий: ListNode{значение: 2, следующий: Нет}} ListNode{значение: 2, следующий: Нет} Однако, когда я использую следующий код, он работает нормально: Метод 2
prev, head.next, head = head, prev, head.next Выход: [1,2,3]
- Нет ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: None}}} = ListNode{значение: 1, следующий: нет} ListNode{значение: 2, следующий: ListNode{значение: 3, следующий: нет}} - ListNode{значение: 1, следующий: нет} ListNode{значение: 2, следующий: ListNode{значение: 3, следующий: нет}} = ListNode{значение: 2, следующий: ListNode{значение: 1, следующий: Нет}} ListNode{значение: 3, следующий: Нет} - ListNode{значение: 2, следующий: ListNode{значение: 1, следующий: Нет}} ListNode{значение: 3, следующий: Нет} = ListNode{значение: 3, следующий: ListNode{значение: 2, следующий: ListNode{значение: 1, следующий: Нет}}} Нет Мне трудно понять, почему первый подход вызывает проблему.
Может ли кто-нибудь объяснить причину этого и предложить решение или обходной путь? Кроме того, мы будем очень признательны за любую информацию о том, как работает назначение кортежей в этом контексте. Спасибо!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
C# удалить zip-файл после распаковки, нужно проверить завершение распаковки?
Anonymous » » в форуме C# - 0 Ответы
- 77 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как сохранить/восстановить состояние распаковки Zstandard для продолжения распаковки?
Anonymous » » в форуме Python - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-