leetcode-445. 两数相加 II

给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。

 

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

示例:

输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 8 -> 0 -> 7

 
思路:模拟题,由于逆序存储数字,首先我们要将其反过来,使用栈即可,相加之后结果列表使用头插法即可。
 
代码:
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None


class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        ll1 = []
        ll2 = []
        while l1 is not None:
            ll1.append(l1.val)
            l1 = l1.next
        while l2 is not None:
            ll2.append(l2.val)
            l2 = l2.next

        res = ListNode(0)
        plus = 0
        while len(ll1) != 0 and len(ll2) != 0:
            temp = ll1.pop() + ll2.pop() + plus
            plus = temp // 10
            temp = temp % 10
            node = ListNode(temp)
            node.next = res.next
            res.next = node

        if len(ll1) != 0:
            while len(ll1) != 0:
                temp = ll1.pop() + plus
                plus = temp // 10
                temp = temp % 10
                node = ListNode(temp)
                node.next = res.next
                res.next = node
        if len(ll2) != 0:
            while len(ll2) != 0:
                temp = ll2.pop() + plus
                plus = temp // 10
                temp = temp % 10
                node = ListNode(temp)
                node.next = res.next
                res.next = node
        if plus != 0:
            node = ListNode(plus)
            node.next = res.next
            res.next = node

        return res.next

 

posted on 2018-08-26 17:11  lxxd  阅读(371)  评论(0编辑  收藏  举报

导航