安静如鸡

  • Home
  • About Me
  • Contact Me
  • 东京女子篮球活动记录
一个博客
  1. 首页
  2. Tech
  3. Leetcode
  4. 正文

2. Add Two Numbers

2026-07-27 0人点赞 0条评论

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example 1:

Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [7,0,8]
Explanation: 342 + 465 = 807.
Code language: HTTP (http)

Example 2:

Input: l1 = [0], l2 = [0]
Output: [0]
Code language: HTTP (http)

Example 3:

Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Output: [8,9,9,9,0,0,0,1]
Code language: HTTP (http)

Constraints:

  • The number of nodes in each linked list is in the range [1, 100].
  • 0 <= Node.val <= 9
  • It is guaranteed that the list represents a number that does not have leading zeros.

这道题没什么特别难的计算,步骤如下

  1. 从头循环L1和L2两个链表。
  2. 如果链表的node还存在,取出该node的val
    两个链表的node的val相加,(value1+value2)再加上上一位进位(numberFromLastNode)就是本次的结果
  3. 这个结果可能> 10 所以我们拿到个位数 (value%10)这个是本次node的val值,然后再拿到需要进位的数(numberFromLastNode =value//10)用于下一次计算。
  4. 然后把所有节点向后移动一位,继续计算下一个节点。
  5. 最后当l1和l2都移动完毕,(not l1 and l2)还剩下的numberFromLastNode可以放在最后一个节点
  6. 最后返回dummy指向的链表头部。

卡点和注意点是:

  • class ListNode要会定义。
  • value1 = l1.val if l1 else 0写法要记住
  • dummy = node这个设定是linkedList常用设定,因为当node指针移动时我们必须要维持dummy始终留在整个链表的开始部分,如此才能在return时直接返回链表初始节点,不然我们没办法拿到初始节点
  • dummy = node并不会让dummy的指针跟着node的值变化,node = node.next时,dummy依然指向链表头部
  • node.next = ListNode(curr)
    node = node.next
    ...
    return dummy.next

    是寻常写法。基本上90%的leetcode题都可以这么写。这样可以保证我们返回时不会有多余的节点。
  • 也可以有另外一种写法:直接修改node.val然后再生成一个新的ListNode让node.next = ListNode(0)但这样很有可能在链表最后造出一个多余的ListNode,我们需要手动把它消除掉。
  • 在最后给出另外一种写法。
  • 注意Prev = None只改变Prev本身,不改变链表。Prev.next = None才会改变链表内容。
# 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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        numberFromLastNode = 0
        node = ListNode(0)
        dummy = node
        while l1 or l2:
            value1 = l1.val if l1 else 0
            value2 = l2.val if l2 else 0
            value = value1 + value2 + numberFromLastNode
            curr = value % 10
            numberFromLastNode = value // 10
            node.next = ListNode(curr)
            node = node.next
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next
        if numberFromLastNode > 0:
            node.next = ListNode(numberFromLastNode)
        return dummy.next
Python

# 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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        numberFromLastNode = 0
        node = ListNode(0)
        dummy = node
        prev = None
       # value = 0
        while l1 or l2:
            value1 = l1.val if l1 else 0
            value2 = l2.val if l2 else 0
            value = value1 + value2 + numberFromLastNode
            node.val = value % 10
            numberFromLastNode = value // 10
            node.next = ListNode(0)
            prev = node
            node = node.next
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next
        if numberFromLastNode > 0:
            node.val = numberFromLastNode
        else:
            prev.next = None
        return dummy
Python
标签: 暂无
最后更新:2026-07-27

Ellison

什么都懂点,什么都不精。属于混吃等死,享受生活,过一天算一天的享乐主义。喜欢电影,阅读,以及游戏和美食。

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 安静如鸡. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang