LinkedList возвращается пустым - PullRequest
0 голосов
/ 30 апреля 2020

Я выполняю LeetCode Problem 445 . Вопрос в том, что вам даны два непустых связанных списка, представляющих два неотрицательных целых числа. На первом месте стоит старший значащий элемент di git, и каждый из их узлов содержит по одному значению di git. Добавьте два числа и верните их как связанный список.

Вы можете предположить, что два числа не содержат ни одного начального нуля, кроме самого числа 0. " Я попытался решить это самостоятельно, реализовав два стека и добавив сумму чисел перед узлом, когда я выскочил из стека. Но мой вывод возвращает пустой список.

Пример:

Ввод: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) Выход: 7 -> 8 -> 0 -> 7

Вот код.

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        s1 = []
        s2 = []

        #push all elements onto stack
        while l1!=None:
            s1.append(l1.val)
            l1 = l1.next

        while l2!=None:
            s2.append(l2.val)
            l2 = l2.next

        #create dummy node
        dummy = ListNode(0)
        l3 = dummy

        carry=0
        while len(s1)>0 or len(s2)>0:
            l1_value = l2_value = 0

            if len(s1)>0:
                l1_value = s1.pop()

            if len(s2)>0:
                l2_value = s2.pop()

            #do addition
            curr_sum = l1_value + l2_value + carry
            carry = curr_sum//10
            last_digit = curr_sum%10

            #add the new node to front of the linked list
            new_node = ListNode(last_digit)
            new_node.next = l3
            l3 = new_node

        if carry>0:
            new_node = ListNode(carry)
            head = ListNode(new_node)
            head.next = l3
            l3 = head

        return dummy.next

1 Ответ

0 голосов
/ 30 апреля 2020

Нет необходимости использовать dummy переменную, просто используйте l3

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        s1, s2 = [], []

        #push all elements onto stack
        while l1:
            s1.append(l1.val)
            l1 = l1.next

        while l2:
            s2.append(l2.val)
            l2 = l2.next

        l3, carry = None, 0
        while s1 or s2:
            l1_value = l2_value = 0

            if len(s1)>0:
                l1_value = s1.pop()

            if len(s2)>0:
                l2_value = s2.pop()

            #do addition
            curr_sum = l1_value + l2_value + carry
            carry, last_digit = divmod(curr_sum, 10)

            #add the new node to front of the linked list
            new_node = ListNode(last_digit)
            new_node.next = l3
            l3 = new_node

        if carry>0:
            head = ListNode(carry)
            head.next = l3
            l3 = head

        return l3

...