Метод не возвращает начало списка

#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. О господи. Я пропустил, что это всегда будет моим заявлением «если». Спасибо, что указали на это.