力扣刷题二:两数相加链表(python3)

这篇博客介绍了一个使用Python实现的算法,用于解决两个单向链表相加的问题。代码中定义了一个ListNode类来表示链表节点,并在Solution类中实现了addTwoNumbers方法。该方法通过遍历两个链表,处理进位和不同长度的链表,最终构造出结果链表。博客详细解释了每一步操作,并提供了完整代码,执行时间为72ms,内存占用14.9mb。

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

本人数据结构也差不多还给老师了,因此也是看别人的代码才做出来。此题是两个单向的链表去求和。首先回顾下基本概念,链表是由多个结点组成的,每个结点存储着:值和指向下一个结点的指针。

# 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:

根据题设,此时l1和l2都为指向头节点的指针,l1.val是值,l1.next是指向下一节点的指针。ListNode为一个结点类,因此可以先构建新链表的头节点:

sumnode = ListNode(l1.val+l2.val)

然后,将l1和l2指针移到下一个结点,在进行相加。此时存在两链表长短不一问题,只需要将短的链表后面置为0即可,还有当两个链表的尾结点还有进位情况(利用sumnode.val > 9在进行一次计算):

while (l1 and (l1.next!=None)) or (l2 and (l2.next!=None)) or sumnode.val > 9:
            l1 = l1.next if l1 else l1
            l2 = l2.next if l2 else l2
            tmp = (l1.val if l1 else 0) + (l2.val if l2 else 0)

然后构建一个新的结点,连接到sumnode上。sumnode为当前结点,当前结点有进位就要加到下一节点,然后把当前结点的值取余。最后跟新当前结点sumnode:

sumnode.next = ListNode(sumnode.val//10 + tmp)
sumnode.val = sumnode.val%10
sumnode = sumnode.next

以下为全部代码,用时72ms,14.9mb:

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        sumnode = ListNode(l1.val+l2.val)
        tr = sumnode
        while (l1 and (l1.next!=None)) or (l2 and (l2.next!=None)) or sumnode.val > 9:
            l1 = l1.next if l1 else l1
            l2 = l2.next if l2 else l2
            tmp = (l1.val if l1 else 0) + (l2.val if l2 else 0)
            sumnode.next = ListNode(sumnode.val//10 + tmp)
            sumnode.val = sumnode.val%10
            sumnode = sumnode.next
        return tr
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值