LeetCode刷题:链表两数相加

LeetCode刷题:链表两数相加

  链表:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

解题分析:

通俗的讲就是从两个非空的链表获取节点值做一个加法,生成新的一个链表。根据事例提出几个问题:

①怎么确定第一个节点?

②假如我们确定了头节点是7,当我们移向下一个节点的时候,怎么留住之前的节点7呢?

dummyHead虚拟头节点:

对于单链表来说,唯一能让它保持联系就是它的头节点,对于事例来说7就是我们的头节点,但是在计算出头节点7之前,我们不知道头节点是什么。这里我们有一个通用的做法:建立一个dummyHead,我们初始一个头节点是0,在计算完链表之后,我们只需要获取dummyHead.next,就是我们想要的链表。

ListNode dummyHead = new ListNode(0); 指针节点:

为了解决第二个问题,当获取到两个链表的头节点2和5计算得到dummyHead的 头节点指向了7,但是我们需要移动dummyHead = dummyHead .next 到下一个节 点,才能对两个链表的4和6计算赋值给dummyHead,这样的话dummyHead的头节点 7相当于就被移除了,所以我们需要一个指针节点curr来指向dummyHead,当curr 移动的时候,dummyhead始终保持节点。

作者:ran-10 链接:https://leetcode-cn.com/problems/add-two-numbers/solution/liang-shu-xiang-jia-xiao-ji-qiao-zhi-dummyheadhe-z/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
 9         dummy = p = ListNode(None) #保存头结点,返回结果
10         s = 0 #每一步的求和暂存变量
11         while l1 or l2 or s:           #循环条件:l1 或者l2(没有遍历完成),s(进位)不为0
12             s += (l1.val if l1 else 0) + (l2.val if l2 else 0)           #这其实是好多代码,我自己写了好多行,但是作者这样写非常简洁,赞
13             p.next = ListNode(s % 10)             #构建新的list存储结果,其实用较长的加数链表存也可以,%10:求个位
14             p = p.next                        
15             s //= 10                                         #求进位
16             l1 = l1.next if l1 else None           
17             l2 = l2.next if l2 else None
18         return dummy.next

怎么说呢,还是不太理解,python里面运行链表不熟悉,直接说就是对链表这个东西不熟悉,明天再写一篇自己的解法

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2769.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • KindEditor配置步骤

    KindEditor配置步骤KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。KindEditor使

    2022年7月3日
    22
  • oracle级plsql安装教程,PLSQL 数据下载库安装使用教程,步骤解析

    oracle级plsql安装教程,PLSQL 数据下载库安装使用教程,步骤解析安装Oracle数据库一、首先安装Oracle数据库*64。二、下载并安装安装PLSQLDeveloper根据计算机的系统位数,从下载的安装包中选择合适的程序,双击“运行”以打开下一个PLSQL软件安装向导。四、根据协议,选中“我接受…”选项,然后单击以下内容。五、选择默认情况下安装在C盘目录中的安装位置,单击“更改”按钮自定义软件安装路径,确认后单击“下一步”。选择安装方式,标准(程序设置…

    2022年6月22日
    28
  • 贴片电阻丝印是什么意思「建议收藏」

    贴片电阻丝印是什么意思「建议收藏」贴片电阻上的数字是什么意思?贴片电阻是电路原理中最常见的电子器件,在一块电路板上使用量较大的将会便是电阻器和电容器了。电阻由于体型小,非常容易设备电焊焊接,能极大地提升批量生产高效率、减少错误率、控制成本,因此应用愈来愈普遍。贴片电阻表层一般都是印着丝印油墨,其丝印油墨带表了不一样的电阻值信息内容,电阻的丝印油墨怎样讲解。普遍的电热丝印一般有这几类状况:1)含有三位数据的丝印油墨;2)2)含有四位数据的丝印油墨;3)3)含有英文字母R的丝印油墨;4)4)含有数据和英文字母混和的丝印油墨。带有

    2022年8月21日
    4
  • 面试之SpringMVC

    面试之SpringMVC面试之SpringMVC

    2022年4月23日
    40
  • python中删除特定字符串

    python中删除特定字符串现在有一个字符串,有一些不想要的单词和特殊字符importretext=’wo,didi;wode,;wode’text0=text.replace(‘didi’,”)print(re.sub(‘[,;]’,”,text0))先用替换后用子串可以得到自己想要的结果:wowodewode python中字符串自带的split方法一次只能使用一个字符对字…

    2022年5月30日
    42
  • encode-decode结构

    encode-decode结构encode的输入是变长的序列向量,每个向量之间会在batch内填充为固定长度,神经网络限制,不能输入变长的向量。encode输出固定长度的向量,但序列数量和输入数量保持不变,也就是一个输入产生一个输出。每个输出之间是独立的。encode的网络可以不固定,比如常见nlp任务用rnn,。encode将可变序列编码为固定状态,decode将固定状态输入映射为其它可变序列。decode的网络可以不固定,其中ctc结合search策略也可以用来做decode。通用的“编码器-解码器”接口定义:fro.

    2022年10月7日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号