组队学习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 |