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