leetcode445. 两数相加 II

1.题目描述

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

 

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

进阶:

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.解题思路

利用连个栈存储链表节点,并设置一个pre指针用于倒置节点,head为当前位置计算出节点的值,head->pre,pre = head

3.代码实现

# 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:
        if not l1 or not l2:
            return l1 or l2
        stack1, stack2 = [l1], [l2]
        while stack1[-1].next:  # 1.入栈元素
            stack1.append(stack1[-1].next)
        while stack2[-1].next:
            stack2.append(stack2[-1].next)
        carry, prev = 0, None
        while stack1 or stack2 or carry:  # 最长遍历
            # 不够补0
            carry += (stack1.pop().val if stack1 else 0) + (stack2.pop().val if stack2 else 0)
            head = ListNode(carry % 10)
            carry //= 10
            head.next = prev  # 倒置连接
            prev = head  # prev更新
        return head

 

你可能感兴趣的:(leetcode,面试题)