两数相加
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0?开头。
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
输入:l1 = [0], l2 = [0] 输出:[0]
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]
我的解法
我不会。
网上找到的解法
# 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 l1 is None:
return l2
if l2 is None:
return l1
tmp = ListNode(0)
res = tmp
flag = 0
while l1 or l2:
tmp_sum = 0
if l1:
tmp_sum = l1.val
l1 = l1.next
if l2:
tmp_sum += l2.val
l2 = l2.next
tmp_res = (tmp_sum + flag) % 10 # 个位
flag = (tmp_sum + flag) // 10 # 十位
res.next = ListNode(tmp_res)
res = res.next
if flag == 1: # flag1
res.next = ListNode(flag)
res = tmp.next
del tmp
return res
?63% / 59%
浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。
Python 取余用?%,取整数用 //(向下取整)。
print(9%7) #2
print(7%9) #7
print(-9%-7) #-2
print(-7%-9) #-7
print(0%1) #0
print(-7%9) #2
print(-9%7) #5
print(7%-9) #-2
print(9%-7) #-5
print(9//2) #4
print(-9//2) #-5
flag1 处是进行是对临界点进行处理,如果不是 l1 或 l2 的最后一位,那么 ListNode(tmp_res) 就会将其覆盖。如果是并且还有进位的话,那么最后一位就为1。
|