美文网首页
LeetCode 2. 两数相加

LeetCode 2. 两数相加

作者: 草莓桃子酪酪 | 来源:发表于2022-09-03 00:32 被阅读0次
    题目

    给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    例:
    输入:l1 = [2,4,3], l2 = [5,6,4]
    输出:[7,0,8]
    解释:342 + 465 = 807

    方法

    根据题目数字是按照逆序存储的,那么首尾即为各位,从左向右进行加法,若存在进位则加在下一个(右边)

    • result 和 curr 分别指向链表的头节点,curr 指向当前节点
    • carry 表示进位,初始为零
    • 循环直至两个链表 l1 和 l2 均为空
      • 若链表 l1 存在,那么将指向该节点的值赋值给 x;否则,赋值零
      • 若链表 l2 存在,那么将指向该节点的值赋值给 y;否则,赋值零
      • sum 表示两个节点加上进位 carry 的和
      • 将该和 sum%10 存入当前节点的下一个节点处,取余数的原因是只能存储一位数,若和为两位数,那么只存储个位
      • 更新进位 carry
      • 为了进行下一步的加法,分别将 l1 和 l2 指向下一个节点
    • 若在完成所有加法后,仍存在进位,那么此时应该将改进为加到下一个节点处
    • 返回新链表
      由于 result 指向的是头节点,而头节点的下一个节点才为链表的第一个节点,所以需要返回 result.next
    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution(object):
        def addTwoNumbers(self, l1, l2):
            result = curr = ListNode()
            carry = 0
            while l1 or l2:
                if l1:
                    x = l1.val
                else:
                    x = 0
                if l2:
                    y = l2.val
                else:
                    y = 0
                sum = x + y + carry
                curr.next = ListNode(sum%10)
                carry = sum // 10
                if l1:
                    l1 = l1.next
                if l2:
                    l2 = l2.next
                curr = curr.next
            if carry:
                curr.next = ListNode(carry)
            return result.next
    
    参考

    代码相关:https://leetcode.cn/problems/add-two-numbers/solution/si-kao-guo-cheng-pythondai-ma-zhu-yi-by-4fl4i/

    相关文章

      网友评论

          本文标题:LeetCode 2. 两数相加

          本文链接:https://www.haomeiwen.com/subject/htvjnrtx.html