2.两数相加-leetcode

题目描述:

  • 给出两个非空的链表用来表示两个非负的整数。其中,他们各自的位数是按照逆序的方式存储的,并且他们的每个节点都只能存储一位数字。
    如果,我们将这两个数相加起来,则会返回一个新的链表来表示他们的和。
    您可以假设除了数字0之外,这两个数都不会以0开头。
    示例:
输入:(2 -> 4 ->3)+(5 -> 6 -> 4)
输出:7 - > 0 -> 8
原因:342 + 465 = 807
  • 使用Python3求解:
  • 算法设计分析:

首先是我们根据题目的意思:传入两个单链表,每个链表结点存放的都是一个整数,我么其实可以按照初等数学那样将两个链表对应的值进行相加的
在这里插入图片描述
这里我们需要使用新定义的一个哑结点来记录新的链表的头,如上面的result对应的链表,它其实也是我们最后需要返回的链表,在python3里面定义非常简单。定义完成之后,初始化一个空的值val记录相加后的结果,结果超出10吗,不超出就存放在当前的位置,工作指针向下移动;如果超出当前的值了,在当前的结点保存超出的部分,也就是余数,进位和两个链表的工作指针下移的新节点继续进行;期间只要有三个条件成立:l1为空,l2为空以及没有进位了,计算自然就跳出,返回新链表的头结点(哑结点)程序结束。
时间复杂度:O(n),虽然有两个链表,但是他们是同时进行的。
空间复杂度:S(n),另外新开一个链表。

# 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:
        # 初始化的时候先赋值为0来定义一个哑结点
        dummyNode = ListNode(0)
        curr = dummyNode
        # python 不能使用null 而是应该使用is not None
        while l1 is not None or l2 is not None:
            # 将当前结点的值赋值给val
            val = curr.val
            # 当前的传入的数组不为空,更新val的值,val的值从哑结点开始逐渐将两个链表的单位值相加
            if l1 is not None:
                val += l1.val
                l1 = l1.next
            if l2 is not None:
                val += l2.val
                l2 = l2.next
            # 最终判断val的值,超出10之后就在当前位置存放余值
            curr.val = val % 10
            # 判断l1和l2链表是否为空以及商10之后是否为0,成立则跳出,
            # 否则就开辟一个新的结点存放进位值(val//10),当前指针向后移动
            if l1 is None and l2 is None and val // 10 == 0:
                break
            curr.next = ListNode(val//10)
            curr = curr.next
        # 返回记录新链表的哑结点,就是头结点。
        return dummyNode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值