2. 两数相加

  1. 找出两个链表中较长的链表,原地修改后,作为最后的返回结果
  2. 两个链表从前往后遍历,考虑进位,直到短链表结束。
  3. 将长链表数值放入结果(考虑进位)。
  4. 考虑是否需要额外增加一个结点来放进位
class Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:# 最重要的是处理进位的问题if not l1: return l2if not l2: return l1p1 = l1p2 = l2while p1 and p2:p1 = p1.nextp2 = p2.nexthead,p2=(l1,l2) if p1 else (l2,l1) # 较长的链表,原地修改后,作为最后的返回结果p1 = headpre_node = headlast = 0while p1 and p2:p1.val = last + p1.val + p2.valif p1.val >= 10:last = 1p1.val = p1.val - 10else:last = 0pre_node = p1p1 = p1.nextp2 = p2.next# 两个链表从前往后遍历,考虑进位,直到短链表结束while p1:p1.val = last + p1.valif p1.val >= 10:last = 1p1.val = p1.val - 10else:last = 0 pre_node = p1p1 = p1.next# 将长链表数值放入结果(考虑进位)if last != 0:pre_node.next = ListNode(last)# 考虑是否需要额外增加一个结点来放进位return head

445. 两数相加 II

第二道题目比第一道题目困难的原因是第一道题目可以沿着链表的方向做进位处理,而第二道题进位方向是链表的反向,因此需要借助栈实现。

class Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:if not l1: return l2if not l2: return l1stack1 = []p1 = l1while p1:stack1.append(p1.val)p1 = p1.nextstack2 = []p2 = l2while p2:stack2.append(p2.val)p2 = p2.nextres = []last = 0while stack1 and stack2:val = last + stack1.pop() + stack2.pop()if val >= 10:last = 1val = val - 10else:last = 0res.append(val)while stack1:val = last + stack1.pop()if val >= 10:last = 1val = val - 10else:last = 0res.append(val)while stack2:val = last + stack2.pop()if val >= 10:last = 1val = val - 10else:last = 0res.append(val)head = ListNode(last)p = headwhile res:p.next = ListNode(res.pop())p = p.nextif last == 1:return headelse:return head.next

更简洁一点的代码,相加的同时构建链表,减少空间使用

class Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:if not l1: return l2if not l2: return l1stack1 = []p1 = l1while p1:stack1.append(p1.val)p1 = p1.nextstack2 = []p2 = l2while p2:stack2.append(p2.val)p2 = p2.nexthead = Nonelast = 0# 从后往前构建链表,最后一个处理lastwhile stack1 or stack2 or last != 0:a = 0 if not stack1 else stack1.pop()b = 0 if not stack2 else stack2.pop()val = last + a + bif val >= 10:last = 1val = val - 10else:last = 0curnode = ListNode(val)curnode.next = headhead = curnodereturn head

时间复杂度:O(max(m,n)),m,n分别为两个链表的长度
空间复杂度:O(m+n)

leetcode链表中的两数相加问题相关推荐

  1. LeetCode第二题:两数相加(Add Two Numbers)

    LeetCode第二题:两数相加(python,java) You are given two non-empty linked lists representing two non-negative ...

  2. 【LeetCode每周算法】两数相加

    题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是 ...

  3. leetCode刷题 2. 两数相加

    原题链接: leetcode-cn.com/problems/ad- 题目描述 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你 ...

  4. LeetCode(Java) 两数相加

    题目描述 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数-),求这个两个数的和,结果也用链表表示. 输入:(2 -> 4 -> ...

  5. 学渣的刷题之旅 leetcode刷题 2. 两数相加

    给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以 ...

  6. 【数据结构与算法】之深入解析运用链表结构计算“两数相加”的算法实现

    一.题目要求 给出两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储 一位数字.请将两个数相加,并以相同形式返回一个表示和的链表(可以假设除了数字 0 之外 ...

  7. LeetCode(2)——两数相加(JavaScript)

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  8. 【LeetCode笔记】2. 两数相加(JAVA、链表)

    文章目录 题目描述 代码 题目描述 解法:直接用两个链表构造出第三个链表即可 注意点:进位carry.进位的情况有几种,都要考虑上. (其实感觉这道题不是很难,挺直观的) 代码 时间复杂度:O(max ...

  9. leetcode刷题 2.两数相加

    解法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() ...

最新文章

  1. 城市规划理论II 通勤与移居
  2. 重磅!华为HCIE将于2021年5月30日改版,取消面试考试
  3. java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...
  4. MapReduce简述
  5. 将servlet[login]标记为不可用_30分钟上手OUTLOOK - 邮件标记
  6. Select查询之通配符
  7. python实现批量转换文件编码(批转换编码示例)
  8. 一个不会画流程图的程序员不是一个好码农
  9. QConf分布式配置管理工具 QConf
  10. 转载:C语言运算符优先级记忆口诀
  11. 计算机网络第七版谢希仁习题,计算机网络 释疑与习题解答 谢希仁 第7七版 计算机网络(第7版)谢...
  12. 市场调研报告-固体废物处理市场现状及未来发展趋势
  13. 2014年度江西省科学技术奖授奖项目名单
  14. 电影文件出现下载不完整的挽救方法(转)
  15. 微信自动投票的php代码
  16. 玩3D游戏头晕怎么办?为什么会头晕?如何解决?
  17. Realm学习(二)
  18. 每日一篇系列---CSS3实现下雨动效
  19. 苹果汽车已上路测试,预计将于明年推出
  20. Chart.js使用(一)

热门文章

  1. css用边框实现圆角矩形
  2. django中的querydict对象_Django之MTV实战(2)
  3. 简述tcp协议的可靠性有哪些机制_腾讯面试HTTP与TCP/IP20连问,你能答出多少?
  4. 微信有电脑客户端吗_一台电脑如何开多个微信?你学会了吗?
  5. android usb没有读写节点,2019踩坑无数含泪写下最新教程系列(三)树莓派挂载android(树莓派通过usb读取手机里面档案)...
  6. 爬虫入门-京东评论爬取和简单分析[学习笔记]
  7. 虚拟机ping不通宿主机,宿主机能ping通虚拟机
  8. python读取txt、csv以及xml文件
  9. 程序人生:程序员做外包“前途“,“技术“,“经验“如何决策
  10. 从0到1开发自动化测试框架(硬货太多,建议阅读)