2021-01-11

组队学习leetcode精选50题 task01

2.给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
假设除了数字 0 之外,这两个数都不会以 0 开头。
题解思路:
1.使用 ***i***来保存两个链表的数字相加产生的进位(链表数字位数从小到大);
2.当前位的值为(l1.val + l2.val + i)%10;
3.进位值为(l1.val + l2.val + i)/10;
4.建立新node,然后将进位传给下一节点。

# 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:
        def add2(l,r,i):
            if not l and not r and not i:
                return None
            #两个旧链表节点数字相加
            s=(l.val if l else 0)+(r.val if r else 0)+i
            #数字之和放入新节点
            node = ListNode(s%10)
            #求当前新链表节点的位数和两个旧链表各自下一个节点相加的和
            node.next = add2(l.next if l else None,r.next if r else None,s//10)
            return node
        return add2(l1,l2,0)
消耗时间56ms
内存消耗14.9MB
语言Python3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值