leetcode刷题

Leecode刷题

题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
代码

Definition for singly-linked list.

class ListNode(object):
def init(self, x):
self.val = x
self.next = None

class Solution(object):
def addTwoNumbers(self, l1, l2):
“”"
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
时间复杂度:O(max(m,n)),m和n分别表示l1和l2的长度, 80ms beaten 73.95%
空间复杂度:O(max(m,n)),额外链表空间长度最多为max(m,n)+1,11.8MB beaten 29.46%。
“”"
# 允许使用额外空间
head = ListNode(0)
# 保存首节点位置,方便返回结果
res = head
# 初始化进位
carry = 0
while l1 != None or l2 != None:
# 获取本位的值,如果某一数长度将其记为0
x = l1.val if l1 else 0
y = l2.val if l2 else 0
# 计算结果,注意附加上进位carry
count = carry + x + y
# 进位结果,整除获取
carry = count // 10
# 保存结果,创建新节点
head.next = ListNode(count % 10)
# 移动各指针
head = head.next
# 对俩加数链表判空,针对高位加低位数的情况
if l1 != None:
l1 = l1.next
if l2 != None:
l2 = l2.next
# 遍历完俩加数指针,如果最高位出现进位结果,需要额外添加
if carry > 0:
head.next = ListNode(1)
return res.next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值