算法-给你两个非空的链表,请你将两个数相加,并以相同形式返回一个表示和的链表

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)

posted @ 2023-05-24 16:44  日新其德止于至善  阅读(18)  评论(0编辑  收藏  举报