Почему моя выходная переменная связанного списка не обновляется каждую итерацию цикла? - PullRequest
0 голосов
/ 23 марта 2019

Я написал этот код для добавления двух чисел, хранящихся в виде связанных списков, для проблемы с Leetcode. Я получаю вывод, который указывает, что моя переменная не обновляется в цикле while, но я не понимаю, почему. Что мне не хватает?

# 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:
        carrybit = 0
        output = ListNode(0)
        iteration = 0
        while l1.next != None or l2.next != None:
            temp = ListNode((l1.val + l2.val + carrybit)%10)
            if l1.val + l2.val + carrybit > 9:
                carrybit = 1
            else:
                carrybit = 0

            temp2 = output.next
            while temp2 != None:
                temp2 = temp2.next
            temp2 = temp


            l1 = l1.next
            l2 = l2.next

        return output

Ответы [ 2 ]

0 голосов
/ 23 марта 2019

Этот код не имеет абсолютно никакого эффекта:

        temp2 = output.next
        while temp2 != None:
            temp2 = temp2.next
        temp2 = temp

Значение temp2 обновляется, пока не достигнет None, а затем его заменят на temp.После этого temp2 никогда не используется и не является temp.Они оба переназначаются с новыми значениями, которые не зависят от результата этой операции.

Поскольку temp назначается новый ListNode, который ни с чем не связан и никогда не изменяется, ListNode выйдет из области видимости и исчезнет.

Единственное, что здесь происходит, это присвоение carrybit, которое используется только в ListNode, который будет уничтожен.

Весьв то время как цикл в конечном итоге ничего не делает.

Я бы предложил несколько менее замысловатый подход:

def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
    output   = None
    lastNode = None
    carry    = 0
    while not (l1 is None and l2 is None):
        if l1 : carry,l1 = l1.val+carry,l1.next
        if l2 : carry,l2 = l2.val+carry,l2.next
        nextNode = ListNode(carry%10)
        carry = carry // 10
        if output: lastNode.next = nextNode
        else     : output        = nextNode
        lastNode = nextNode
    if carry: 
        lastNode.next = ListNode(carry%10)
    return output
0 голосов
/ 23 марта 2019

Вы присваиваете значения локальной переменной temp2.Это изменит только temp2, output.next или предыдущий temp2.next не изменится.

Вам необходимо назначить output.next, если вы хотите изменить его.

...