概述
题目:
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
思路:
建立新的链表 l3 用来存储结果,flag为进制位,flag=1时,表示两位相加>9,需要进位。flag=0时,表示两位相加<=9,不需要进位。
该方法时间复杂度低,但是空间复杂度高,因为新建了l3链表保存结果。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
global flag # 进位标志
flag=0
l3=ListNode() # l3为结果链表的头节点
bb=l3 # bb为结果链表的尾节点
while l1 and l2: # l1和l2都有值时
add1=l1.val+l2.val+flag # add1为l1+l2以及进位位的值
if add1>=10:
if bb:
bb.val=add1-10
flag=1
else:
if bb:
bb.val=add1
flag=0
if l1.next==None and l2.next==None and flag==0:
# 如果两个链表遍历结束,且无进位,直接返回结果链表
return l3
if l1.next==None and l2.next==None and flag==1:
# 如果两个链表遍历结束,有进位,则创建新的节点保存进位,然后返回结果链表
aa=ListNode(1,None)
# 建立新的节点aa,存储当前和的结果,并把该节点连接到结果链表的尾部
if aa and bb:
bb.next=aa
bb=bb.next
return l3
aa=ListNode()
if aa and bb:
bb.next=aa
bb=bb.next
l2=l2.next
l1=l1.next
while l1: # 只有l1有值,l2已遍历结束
add2=l1.val+flag
if add2>=10:
if bb:
bb.val=add2-10
flag=1
else:
if bb:
bb.val=add2
flag=0
if l1.next==None and flag==0:
return l3
if l1.next==None and flag==1:
aa=ListNode(1,None)
if aa and bb:
bb.next=aa
bb=bb.next
return l3
aa=ListNode()
if aa and bb:
bb.next=aa
bb=bb.next
l1=l1.next
while l2: # 只有l2有值,l1已遍历结束
add3=l2.val+flag
if add3>=10:
if bb:
bb.val=add3-10
flag=1
else:
if bb:
bb.val=add3
flag=0
if l2.next==None and flag==0:
return l3
if l2.next==None and flag==1:
aa=ListNode(1,None)
if aa and bb:
bb.next=aa
bb=bb.next
return l3
aa=ListNode()
if aa and bb:
bb.next=aa
bb=bb.next
l2=l2.next
return l3
方法2:
首先判断l1和l2的长度,为长度短的链表后面补零对齐,然后再进行相关的计算。
最后
以上就是陶醉蜻蜓为你收集整理的力扣:两数相加(python)题目:思路:方法2:的全部内容,希望文章能够帮你解决力扣:两数相加(python)题目:思路:方法2:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复