跳至主要內容

面试题 02.05. 链表求和

ITCharge小于 1 分钟

面试题 02.05. 链表求和open in new window

  • 标签:递归、链表、数学
  • 难度:中等

题目链接

题目大意

给定两个非空的链表 l1l2,表示两个非负整数,每位数字都是按照逆序的方式存储的,每个节点存储一位数字。

要求:计算两个整数的和,并逆序返回表示和的链表。

解题思路

模拟大数加法,按位相加,将结果添加到新链表上。需要注意进位和对 10 取余。

代码

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = curr = ListNode(0)
        carry = 0
        while l1 or l2 or carry:
            if l1:
                num1 = l1.val
                l1 = l1.next
            else:
                num1 = 0
            if l2:
                num2 = l2.val
                l2 = l2.next
            else:
                num2 = 0

            sum = num1 + num2 + carry
            carry = sum // 10

            curr.next = ListNode(sum % 10)
            curr = curr.next

        return head.next