LeetCode 2: Add Two Numbers题解(Python)

本文详细解析了LeetCode题目“加两数之和”,通过链表实现两个整数相加的过程,讨论了如何处理进位问题,并提供了一个Python实现的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode 2: Add Two Numbers

分类:Linked List
难度:Midium (M-)
描述: 给两个链表(linked list),链表元素是int形式,求两个链表代表的数的和
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

链接: Add Two Numbers

思路:

此题稍微麻烦之处在于要用linked list做数学运算。那么直接模拟数学运算即可。需要注意的点是进位问题。这里可以使用一个carry来存储进位位。比方说5+8=13,进一位,carry = (5+8)//10 = 1
除此之外,如果进位在最后一位,可以把res.next指向carry即可:res.next = ListNode(carry). 代码如下:

# 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: ListNode, l2: ListNode) -> ListNode:
        if not l1 and not l2:
            return None
        result = ListNode() #ListNode(None)
        res = result
        carry = 0  '''承载进位位'''
        while l1 or l2:
            val1, val2 = 0, 0
            if l1:
                val1 = l1.val
                l1 = l1.next
            if l2:
                val2 = l2.val
                l2 = l2.next
            ans = carry + val1 + val2
            carry = ans//10
            res.next = ListNode(ans%10)
            res = res.next
        if carry > 0:  '''如果到了末尾,进位位不为0,需要连接到res链表尾部'''
            res.next = ListNode(carry)
        return result.next
        
个人总结:

1)此题不难,但是考验基本功
2)链表相关问题,在return时候是return链表还是链表.next,在其他的linked list问题中需要注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值