题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers

题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

提示:

每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零

解题思路

此题主要考查的是链表的基础操作,思路十分的明确,链表的基础操作就不加赘述了。

根据题目所述,数字是以链表的形式逆序存放的,这样一来,逆序的问题也不需要考虑了,余下的问题仅剩两个:

1、高位补0的问题

由于数字的位数不一定相等,所以链表的长度也不一定相等,需要在计算完链表共同相加的部分后,会有一条链表多出一部分,需要将多出的这部分连接到新的链表上去。

2、进位问题

这里设置了一个标志位作为进位,每次求和时候会加入标志位,并且求和完毕后更新标志位。

重做这道题的原因是当时在学习Python,所以使用了Python写了一遍这题,熟悉了一下Python的语法。

源码展示

# 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:
root = ListNode(l1.val + l2.val)
root.next = None
fa = root
if root.val >= 10:
root.val = root.val % 10
jw = 1
else:
jw = 0
i = 1
p1 = l1.next
p2 = l2.next
while p1 != None and p2 != None:
if p1.val + p2.val + jw >= 10:
node = ListNode((p1.val + p2.val + jw) % 10)
jw = 1
else:
node = ListNode(p1.val + p2.val + jw)
jw = 0
fa.next = node
fa = node
p1 = p1.next
p2 = p2.next
i += 1
if p1 == None:
fa.next = p2
else:
fa.next = p1
p = fa.next
while jw == 1:
if p != None:
p.val += 1
if (p.val >= 10):
p.val = p.val % 10
else:
jw = 0
else:
p = ListNode(1)
p.next=None
fa.next=p
break
if p.next != None:
fa=p
p = p.next
else:
fa=p
p = None
return root

运行结果

最新文章

  1. Win7 on VirtualBox 看不到 usb device
  2. Linux JDK 安装
  3. 60行JS实现俄罗斯方块
  4. Design Patterns (简单工厂模式)
  5. windows下安装openssh服务并实现远程登录
  6. HTML5 离线功能介绍
  7. VC用OLE方式读写Excel
  8. CSS简介模块
  9. 百度网盘免费扩容 免费扩容到2048G
  10. vuex Loding加载..
  11. 携程Android App的插件化和动态加载框架
  12. F#正则表达式
  13. 关于TypeError: strptime() argument 1 must be str, not bytes解析
  14. centos7防火墙iptables开放常用端口
  15. 带你熟悉SQLServer2016中的System-Versioned Temporal Table 版本由系统控制的临时表
  16. Department and Student
  17. JDK JRE JVM的区别
  18. 获取String类型汉字乱码,如何进行编码
  19. android--------自定义控件ListView实现下拉刷新和上拉加载
  20. 小学生福利V2.0.1

热门文章

  1. C++进阶(unordered_set+unordered_map模拟实现)
  2. 16、SQL操作JSON字段
  3. vivo 服务端监控体系建设实践
  4. Spark详解(07-1) - SparkStreaming案例实操
  5. cmd无限弹窗
  6. python进阶之路5之流程控制(垃圾回收机制)
  7. ac自动姬
  8. 真正“搞”懂HTTP协议09之这个饼干不能吃
  9. Node.js+Koa2+TypeScript技术概览
  10. SQLSERVER 的四个事务隔离级别到底怎么理解?