美文网首页
一道关于链表的题

一道关于链表的题

作者: 天秤座的橘子 | 来源:发表于2020-03-20 23:01 被阅读0次

    题目简述:【其实就是从leetcode里面抄过来的题】

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

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

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


    解题思路:

    如果链表但长度是给定的话,我们可以将链表里的数字拿出来组合成一个数字来进行相加,相加之后对于输出的结果,通过/10的方式依次取出。但是链表的长度是未知的,所以我们不能用这么取巧的方式来解题。【个人想法,我看到有个大神确实这样做了,是我狭隘了,其实是一样的递归思路】

    其实我看到之后也是没思路的,是参考了大家的解题方法,现在只是为了记录一下,加深自己的印象。

    还是一位一位去相加,如果有进位就同步到下一位上,由于链表可以通过.next拿到下一个节点的值,所以我们可以用到递归,只用写第一位的加法规则,每一个next都进行套用,最后输出结果。


    链表的定义:

    链表是由一个个节点组合起来的一个数据链,抽象出来的结构如下图,转自https://www.cnblogs.com/king-ding/p/pythonchaintable.html。这里十分详细,还讲了列表的创建和操作,十分适合我这种小白0 0


    代码实现:

    ```

    # Definition for singly-linked list.

    # class ListNode:

    #     def __init__(self, x):

    #         self.val = x

    #         self.next = None

    class Solution:

        def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:

            return self.addtwo(l1,l2)

        def addtwo(self,l1,l2,sum=0):

            if not l1 and not l2 and sum==0:

                return None       #这里一定不能写成NULL

            l1_val = l1.val if l1 else 0   #这里的三目运算符,意思是如果l1不为空,就取它的值,否则就是0

            l2_val = l2.val if l2 else 0

            l1_next= l1.next if l1 else None #这里是取下一个节点

            l2_next= l2.next if l2 else None

            sum1 = l1_val + l2_val + sum

            if sum1 >= 10:

                result = ListNode(sum1 -10 )

                result.next = self.addtwo(l1_next,l2_next,1)

            else :

                result = ListNode(sum1)

                result.next = self.addtwo(l1_next,l2_next)

           return result

    ```


    相关文章

      网友评论

          本文标题:一道关于链表的题

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