добавление и повторение связанного списка в обратном порядке для получения обратной суммы - PullRequest
0 голосов
/ 05 марта 2020

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

Пример: 342 + 465 = 807 (ожидаемый результат)

input =

[2] -> [4] - > [3],

[5] -> [6] -> [4]

ожидается = [7] -> [0] -> [8]

фактический = [7] -> [8]

   carryOver = 0
   current1 = l1
   current2 = l2
   result = None
   resultC = None
   while current1 is not None:
       val = current1.val + current2.val+ carryOver
       if val>= 10: 
           carryOver = val//10  
       else:
           carryOver = 0 

       val = val%10  

       if result == None:
           result = ListNode(val)
           resultC = result 
       else:
           resultC.next = ListNode(val) 
       current1 = current1.next
       current2 = current2.next

   if carryOver != 0:
       resultC.next = ListNode(carryOver)

   return result

1 Ответ

0 голосов
/ 06 марта 2020

Это может быть то, что вы ищете.

def add_list(l1,l2):

    max_length=max(len(l1),len(l2))
    l1,l2=[[0]]*(max_length-len(l1))+l1,[[0]]*(max_length-len(l2))+l2 # padding zeros
    l1,l2=l1[::-1],l2[::-1]#temporary reversing of list
    carry=0
    d=[]
    for x in zip(l1,l2):
        tempsum=x[0][0]+x[1][0]+carry

        carry=0
        if tempsum>9:
            carry,tempsum=tempsum//10,tempsum%10
        d.append([tempsum])
    if carry !=0: 
        d.append([carry])
    return d[::-1]
...