我是靠谱客的博主 陶醉蜻蜓,最近开发中收集的这篇文章主要介绍力扣:两数相加(python)题目:思路:方法2:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:

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

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

你可以假设除了数字 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:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部