#python #memory #data-structures #singly-linked-list
Вопрос:
Поэтому, когда я запускаю этот код, он не работает, и я обнаружил, что у меня есть проблема в моем createNewList
методе. В этом методе я извлекаю каждую цифру из числа, начиная с самой правой цифры. Затем я добавляю каждую из этих цифр по одной за раз в новый односвязный список. Проблема, с которой я столкнулся, заключается в том, что я теряю ссылку на начало списка. В конце этого метода я пытаюсь вернуть начало списка.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
l1Number = self.listToNumber(self.reverse(l1))
l2Number = self.listToNumber(self.reverse(l2))
l1Andl2Sum = l1Number l2Number
return self.createNewList(l1Andl2Sum)
def createNewList(self, number: int) -> ListNode:
newList, head = None, None
while number > 0:
if newList is None:
newList = ListNode(number % 10)
head = newList
else:
newList = ListNode(number % 10)
newList = newList.next
number //= 10
return head
def reverse(self, head: ListNode) -> ListNode:
previous = None
while head is not None:
nextNode = head.next
head.next = previous
previous = head
head = nextNode
return previous
def listToNumber(self, head: ListNode) -> int:
number = 0
while head is not None:
number = head.val
head = head.next
if head is not None:
number *= 10
return number
Комментарии:
1. Вы нам не показываете
ListNode
, но я предполагаю, что новоеListNode
next
значение равно Нулю. Таким образом, цикл вcreateNewList
ВСЕГДА будет следовать поif newList is None:
пути. Вы не должны продвигатьсяnewList
вперед, пока вам не понадобится добавить к нему новый узел.2. О господи. Я пропустил, что это всегда будет моим заявлением «если». Спасибо, что указали на это.