1、题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
2、初始思路
2.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: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:dummy = ListNode()head = dummycarry = 0if not l1:dummy.next = l2if not l1:dummy.next = l1while l1 or l2:# 获取当前节点的值,如果链表为空则值为 0x = l1.val if l1 else 0y = l2.val if l2 else 0# 计算当前节点的和以及进位total = x + y + carrycarry = total // 10 # 计算进位val = total % 10 # 计算当前节点的值# 创建新节点并连接到合并链表head.next = ListNode(val)head = head.next # head 指针后移# 移动到下一个节点if l1:l1 = l1.nextif l2:l2 = l2.next# 如果最后还有进位,创建一个新节点if carry > 0:head.next = ListNode(carry)return dummy.next