LeetCode 2. 两数相加

题目

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 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/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个...
    程序员A君阅读 975评论 0 0
  • 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存...
    Kegem阅读 1,742评论 0 0
  • 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只...
    罗健伦阅读 1,274评论 0 0
  • 2. 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且...
    TheKey_阅读 1,839评论 0 1
  • 2. 两数相加 Description 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的...
    狂吃不胖温同学阅读 4,438评论 0 1