2. 两数相加(中)

题目

  • 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

    请你将两个数相加,并以相同形式返回一个表示和的链表。

    你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

题解:递归

  • 仔细理解题意发现,不用逆转链表,刚好可以从两个链表的头开始相加,直接返回相加的结果就是题目的意思。
# 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]:
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        # 如果其中一个链表为空,直接返回另一个链表
        if l1 is None:
            return l2
        if l2 is None:
            return l1

        # 将l1和l2对应节点的值相加,赋值给l1节点
        l1.val += l2.val

        # 如果相加的结果大于等于10,需要进位
        if l1.val >= 10:
            # 如果l1的下一个节点为空,创建一个新节点,并将其值初始化为0
            if l1.next is None:
                l1.next = ListNode(0)
            # 如果l2的下一个节点为空,创建一个新节点,并将其值初始化为0
            if l2.next is None:
                l2.next = ListNode(0)
            
            # 进位值1加到l1的下一个节点的值上
            l1.next.val += 1

            # 递归调用自身处理下一个节点的相加操作
            l1.next = self.addTwoNumbers(l1.next, l2.next)
            
            # 对l1节点的值取余,保留十位数上的值
            l1.val %= 10
        else:
            # 递归调用自身处理下一个节点的相加操作
            l1.next = self.addTwoNumbers(l1.next, l2.next)
            
        # 返回l1链表,表示相加的结果
        return l1
posted @ 2023-12-21 16:08  Frommoon  阅读(3)  评论(0编辑  收藏  举报