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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jmeter安装教程

    jmeter安装教程基于windows,jmeter4.0版本。1.下载安装包地址:http://jmeter.apache.org/download_jmeter.cgi2.解压,配置环境2.1新增系统变量JMETER_HOME变量值:E:\developer\apache-jmeter-4.0注意,根据自己的路径配置,到这一级就好了。2.2配置classpath在…

    2022年5月3日
    41
  • yum安装与卸载软件常见命令「建议收藏」

    yum安装与卸载软件常见命令「建议收藏」1.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的。安装的命令是,yuminstall~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断;删除的命令是,yumremove~,同安装一样,yum也会查询数据库,给出解决依赖关…

    2022年6月12日
    44
  • π弧度转化成角度为_角度化成弧度公式

    π弧度转化成角度为_角度化成弧度公式这两天在看同事写的四叉树代码,其中用到了孤度和角度之间的转换,所以转载此文章进行了学习弧度与角度的关系一、角的两种单位“弧度”和“度”是度量角大小的两种不同的单位。就像“米”和“市尺”是度量长度大小

    2022年8月3日
    9
  • 计算机网络中广域网和局域网_广域网接入技术有哪些

    计算机网络中广域网和局域网_广域网接入技术有哪些 局域网与广域网   局域网(LocalAreaNetwork,LAN)是将分散在有限地理范围内的多台计算机通过传输媒体连接起来的通信网络,通过功能完善的网络软件,实现计算机之间的相互通信和资源共享;广域网(WideAreaNetwork,WAN)是在传输距离较长的前提下所发展的相关技术的集合,用于将大区域范围内的各种计算机设备和通信设备互联在一起,组成一个资源共享的通信网络。 …

    2022年10月10日
    4
  • webstorm 2022激活码_在线激活

    (webstorm 2022激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    890
  • 实例分割与语义分割_genitive case

    实例分割与语义分割_genitive case摘要本文提出了一个简单的全卷积网络来实现实时的实例分割(from加州大学戴维斯分校)MSCOCO数据集——mAP=29.8%,33fps,在单个TitanXp上实验,比目前任一方法都要快速,并且只使用了单个GPU。为何获得如此好的效果:将实例分割任务分成了两个并行的过程:产生一系列模板mask预测每个实例mask的系数之后将模板mask和实例mask系数进行线性组合来获得实……

    2022年8月23日
    5

发表回复

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

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