python3两数相加

python3两数相加

两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

在这里插入图片描述

示例 1:

输入: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.创建一个新链表,新链表的头部先设置为l1头部和l2头部之和。
2.遍历两个链表,只要有一个还没有遍历完就继续遍历
3.每次遍历生成一个当前节点cur的下一个节点,其值为两链表对应节点的和再加上当前节点cur产生的进位
4.更新进位后的当前节点cur的值
5.循环结束后,因为首位可能产生进位,因此如果cur.val是两位数的话,新增一个节点
6.返回头节点

由题目注释可以看出listNode这个类是用来创建链表的,默认next=None,val=0.
Definition for singly-linked list.
class ListNode:
def init(self, val=0, next=None):
self.val = val
self.next = next

# 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:
        head = ListNode(l1.val+l2.val)
        current = head
        while l1.next or l2.next:
            l1 = l1.next if l1.next else ListNode()
            l2 = l2.next if l2.next!=None else ListNode()
            current.next = ListNode(l1.val+l2.val+current.val//10)
            current.val = current.val%10
            current = current.next
        if current.val >= 10:
            current.next = ListNode(current.val//10)
            current.val = current.val%10
        return head

改进改进:增加了空间复杂度。本以为一方为None后直接把另一个链表连上就ok了。然后,就打脸了。
在这里插入图片描述
然后又加了while


> [9999]

# 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:
        head = ListNode(l1.val+l2.val)
        current = head
        while l1.next and l2.next:
            l1 = l1.next 
            l2 = l2.next 
            current.next = ListNode(l1.val+l2.val+current.val//10)
            current.val = current.val%10
            current = current.next
        if l1.next == None and l2.next :
            while l2.next:
                l2 = l2.next
                current.next= ListNode(l2.val+current.val//10)
                current.val = current.val%10
                current = current.next
                current.next = l2.next
        elif l2.next == None and l1.next:
            while l1.next:
                l1 = l1.next
                current.next= ListNode(l1.val+current.val//10)
                current.val = current.val%10
                current = current.next
                current.next = l2.next
        if current.val >= 10:
            current.next = ListNode(current.val//10)
            current.val = current.val%10
        return head

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100093.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • halcon手眼标定[通俗易懂]

    halcon手眼标定[通俗易懂]手眼标定最简单的方法:九点标定九点标定的目的:建立Mark点的图像坐标与其在机械手坐标系下的仿射变换矩阵,利用求得的仿射变换矩阵,可以把Mark点的图像坐标转成物理坐标,进而控制机械手完成定点抓取任务。halcon九点标定算子%Mark点像素坐标area_center(SortedRegions,Area,Row,Column)%Column_robot:=[275,225,17…

  • VUE父子组件之间的传值,以及兄弟组件之间的传值;

    VUE父子组件之间的传值,以及兄弟组件之间的传值;一、Vue父子组件之间传值vue使用中,经常会用到组件,好处是:1、如果有一个功能很多地方都会用到,写成一个组件就不用重复写这个功能了;2、页面内容会简洁一些;方便管控;子组件的传值是通过props来传递数据,$emit来触发事件;下面是一个简单的子组件props传值:父组件的部分:首先引入组件,在组件上绑定你要传给组件的值;然后,在组件里通过props来接收你从父页面传…

  • 拒绝接口裸奔!开放API接口签名验证!

    拒绝接口裸奔!开放API接口签名验证!

  • 150套JSP源码–免费下载

    150套JSP源码–免费下载150套JSP源码免费下载适用于学习百度云下载地址:链接:https://pan.baidu.com/s/1J7-O9k6o8f5dFh71VzCpuA提取码:zb7p如下载地址失效请私信作者

  • codetemp-2: CObject::AssertValid()

    codetemp-2: CObject::AssertValid()原型:[virtual]voidCObject::AssertValid()const//说明:该成员函数只能对成员变量做”引用型”操作,不能做”加工型”操作{ASSERT(this!=NULL);}MSDN:Whenyouwriteyourownclass,youshouldoverridetheAssertValidfunc…

  • Java+Servlet+JSP+Mysql+Tomcat实现Web学生选课管理系统

    Java+Servlet+JSP+Mysql+Tomcat实现Web学生选课管理系统Java实现Web学生选课管理系统一、系统介绍1.软件环境2.系统功能3.数据库二、系统展示1.登录页面2.学生-主页面3.学生-查看个人信息4.学生-选择课程5.学生-查看已选课程6.教师-主页面7.教师-查看个人信息8.教师-评分9.教师-查看任课信息10.管理员-主页面11.管理员-管理员功能-查看个人信息12.管理员-管理员功能-添加新的管理员13.管理员-学生功能-添加学生14.管理员-学生功能-获取所有学生15.管理员-课程功能-添加课程16.管理员-课程功能-查询课程17.管理员-教师功能-添

    2022年10月16日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号