Leetcode---2.两数之和
2023-03-14 22:35:29 时间
题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
分析
简单看了一下这道题直接开始解题,我的思路其实也简单,遍历两个列表,使相同位数对应的两个数相加如果大于10就进一,如果小于10直接保留,只用把长度小的数组遍历完即可,但要考虑最后一个数是否大于10,
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
l1_length=len(l1)
l2_length=len(l2)
l3=[]
num = min(l1_length, l2_length)
flag=0
for i in range(0,num):
s=l1[i]+l2[i]+flag
if s-10>=0:
flag=1
s=s-10
l3.append(s)
continue
flag=0
l3.append(s)
if num==l1_length and num==l2_length:
return l3
if num==l1_length:
for i in l2[num:l2_length]:
if flag!=0:
l3.append(i+flag)
flag=0
l3.append(i)
# print(l2[num-1:])
if num==l2_length:
for i in l1[num:]:
if flag != 0:
l3.append(i + flag)
flag = 0
l3.append(i)
return l3
设置的flag就是一个标志看两个数相加是否大于10,又信誓旦旦的去提交,结果直接报错
结果再次一看发现审题错误,题目中说的是链表,因此我们首先要认识链表,
链表
链表即是线性表的一种,线性表的链式表示,
链式存储结构特点:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以连续,也可以不连续)。
单链表可由头指针唯一确定,头指针指向链表中第一个结点。
首元结点是存储第一个元素的结点。
若要访问数据元素ai,须从头指针出发,顺着指针域逐个结点访问,直至第i个结点。
因此,线性表的链式存储结构只适合顺序访问,不支持直接访问。
最终代码内含注释
注释版
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
# 定义头节点,val赋值为0
head_node = ListNode(0)
node = head_node
# 进位标识符carry,初值为0
carry = 0
# while循环,对两链表对应位和上一位产生的进位carry进行相加操作,并判断是否产生了进位,记录carry值
while l1 !=None or l2 != None:
l1_num = l1.val if l1 != None else 0
l2_num = l2.val if l2 != None else 0
num = (l1_num + l2_num + carry)%10
carry = 1 if l1_num + l2_num + carry>= 10 else 0 # 判断是否产生进位
node.next = ListNode(num) # 在链表尾部添加本次循环所得节点
node = node.next
l1 = l1.next if l1 !=None else None # l1指向下一节点
l2 = l2.next if l2 !=None else None # l2指向下一节点
# 循环后若最高位产生了进位则在链表尾部添加一个val为1的节点
if carry == 1:
node.next = ListNode(1)
# 最后结果舍弃头节点
head_node = head_node.next
return head_node
相关文章
- 微软 GitHub 大幅改进代码搜索功能,已发布技术预览版
- Windows 11新预览版22518推送:桌面壁纸/任务栏优化、加入语音操控
- 版本帝 Firefox 95 正式发布,新的画中画功能
- 微软 Windows 11/10 Edge 浏览器“大声朗读”已支持超 80 个国家和地区语言
- Docker 网络 IP 地址冲突了,我该怎么办呢?
- 添加树莓派4B到OHOS3.0编译框架
- 谷歌 Chrome 浏览器现已支持安卓 12 手机滚动屏幕截图
- Google 公布 2021 年热门 Chrome 扩展程序名单
- 英特尔的 Cloud-Hypervisor 项目将转移到 Linux 基金会
- 深入理解Linux内核之脏页跟踪
- 浏览器的引擎编译、执行原理知多少?
- 禁用VBS,提高Windows 11性能,这个技巧必须要掌握
- Windows 11老毛病终于解决:飞行模式不再自动关闭蓝牙
- FreeDOS 配置指南
- 用《华为浏览器》看鸿蒙开源时,带棵“导航树”
- 苹果 iPadOS 15.2 RC 预览版仍未支持通用控制
- 当 Argo CD 遇上 Flux CD,谁才是 Kubernetes 上 GitOps 的真王者?
- Windows 11全新记事本到来:全新视觉 引入深色模式 增强查找和替换功能
- 重新设计的 Windows 11 新版本记事本开始内测
- Linux 中断子系统(一):框架