算法-给你两个非空的链表,请你将两个数相加,并以相同形式返回一个表示和的链表
1.题目描述
https://leetcode.cn/problems/add-two-numbers/?envType=study-plan-v2&envId=top-100-liked
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表
示例1
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
难度: 中等
2.解法
思路:
1.变量carry存储是否有进位
2.python内建函数divmod(val,10)返回除数和余数
class ListNode():
'''
链表
'''
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
head = cur = ListNode()
carry = 0
while carry or l1 or l2:
val = carry
if l1: l1, val = l1.next, l1.val + val
if l2: l2, val = l2.next, l2.val + val
carry, val = divmod(val, 10)
cur.next = ListNode(val)
cur = cur.next
return head.next
时间复杂度O(N) 空间复杂度O(1)