两数相加----LeetCode----(8)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36697353/article/details/87281166

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

首先,自己在链表用于存储方面的表达上面,比较不会,看了看解决思路如下:

下面表示了链表的形式,这样一看,自己就觉得一目了然了。

知识补充:

个人理解,哑节点(dummy node)是初始值为NULL的节点,创建在使用到链表的函数中,可以起到避免处理头节点为空的边界问题的作用,减少代码执行异常的可能性。

也就是说,哑节点的使用可以对代码起到简化作用省略当函数的入口参数为空时的判断)。

哑节点(dummy Node)是一个被人为创建的节点,虽然其内容为NULL,但是它在堆中有占有一定的空间。
哑节点的使用可以避免边界问题的处理,达到简化代码与减少代码出错可能性的目的。

算法:

就像你在纸上计算两个数字的和那样,我们首先从最低有效位也就是列表l1和l2的表头开始相加。由于每位数字都应当处于0...9的范围内,我们计算两个数字的和时可能会出现溢出。例如, 5+7=12。在这种情况下,我们会将当前位的数值设置为2,并将进位carry=1带入下一次迭代。进位carry必定是0或1,这是因为两个数字相加(考虑到进位)可能出现的最大和为9+9+1=19

伪代码如下:

  • 将当前节点初始化为返回列表的哑结点
  • 将进位carry初始化为0
  • 将p和q分别初始化为列表l1和l2的头部
  • 遍历列表了l1和l2直至到达它们的尾端
  1.       将x设为节点p的值,如果p已经到达l1的末尾,则将其值设为0。
  2.       将y设为节点q的值,如果q已经到达l2的末尾,则将其值设为0。
  3.       设定 sum = x + y + carry
  4.       更新进位的值, carry = sum/10
  5.       创建一个数值为(sum mod 10)的新结点,并将其设置为当前节点下的一个结点,然后将当前结点前进到下一个结点。
  6.       同时,将p和q前进到下一个结点
  • 检查 carry = 1carry=1 是否成立,如果成立,则向返回列表追加一个含有数字 11 的新结点。
  • 返回哑结点的下一个结点。

python 代码如下:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        re = ListNode(0)
        r =re 
        carry = 0
        while(l1 or l2):
            x = l1.val if l1 else 0
            y = l2.val if l2 else 0
            s = carry + x + y
            carry = s//10
            r.next = ListNode(s%10)
            r = r.next
            if(l1 != None):
                l1 = l1.next
            if(l2 != None):
                l2 = l2.next
        if(carry >0):
            r.next = ListNode(1)
        return re.next

总结:

  链表知识还是掌握的不是很深,理解的也不是很熟,需要多加练习

猜你喜欢

转载自blog.csdn.net/baidu_36697353/article/details/87281166