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里面运行链表不熟悉,直接说就是对链表这个东西不熟悉,明天再写一篇自己的解法

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Access denied for user ‘root‘@‘localhost‘问题的解决「建议收藏」

    Access denied for user ‘root‘@‘localhost‘问题的解决「建议收藏」问题场景在阿里云上部署了一台服务器,CentOS6.8系统环境,安装了MySql+Nginx+Git+vsftpd等软件,在本地Linux终端以非root账户SSH远程登录服务器,在将项目打包发布时遇到如题所示问题。代码中配置文件里的用户名不是“root”,密码正确,且该用户名和密码是配置在服务端数据库的用户表中的。但是在用浏览器调用跟数据库交互接口时出错:尝试解决网上搜了一堆文章,主要集中在(1…

    2022年10月28日
  • Opencv学习笔记(九)光流法

    Opencv学习笔记(九)光流法原创文章,转贴请注明:http://blog.csdn.net/crzy_sparrow/article/details/7407604   本文目录:     一.基于特征点的目标跟踪的一般方法     二.光流法     三.opencv中的光流法函数    四.用类封装基于光流法的目标跟踪方法     五.完整代码     六.参考文献

  • sql 聚合函数有哪些

    sql 聚合函数有哪些聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUPBY子句一同使用,SQLSERVER中具体有哪些聚合函数呢?我们来一一看一下:1.AVG返回指定组中的平均值,空值被忽略。例:selectprd_no,avg(qty)fromsalesgroupbyprd_no2.COUNT返回指定组中项目的数量。例…

  • markdown表格语法_在线markdown编辑器

    markdown表格语法_在线markdown编辑器"markdown使用教程""markdown系列教程"推荐阅读"你不知道的Markdown基础知识"markdown制作表格

  • ajax写法_ajax一次请求多次响应

    ajax写法_ajax一次请求多次响应ajax—-js原生写法varxhr;functionrukou()//入口函数{xhr=getxhr();if(xhrnull){alert(“浏览器不支持!”);}varurl="";xhr.onreadystatechange=fanhui;xhr.open(“GET”,url,true);xhr.send(null);}functionfanhui…

  • pip和pip3的区别_linux将文件改为只读

    pip和pip3的区别_linux将文件改为只读前言装完python3后发现库里面既有pip也有pip3,不知道它们的区别,因此特意去了解了一下。解释先搜索了一下看到了如下的解释,安装了python3之后,库里面既会有pip3也会有pip1.

发表回复

您的电子邮箱地址不会被公开。

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