LeetCode addTwoNumbers Python3

本文介绍如何使用Python处理链表结构,实现两个逆序存储的非负整数链表相加。通过构建结果链表,循环获取两链表节点值并处理进位,最后检查最高位是否溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:给出两个 非空链表 来表示两个非负整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果将这两个数加起来,则会返回一个新的 链表 来表示它们的和。可以假设除了数字 0 以外,这两个数不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出: 7 -> 0 -> 8
原因: 342 + 465 = 807

先给出代码:

# Definition for singly-linked list.
# class ListNode:
# 	def __init__(self, x):
#		self.val = x
#		self.next = None
class Solution:
	def addTwoNumber(self, l1, l2):
		result = ListNode(True)
		res = result
		carry = 0
		while l1 or l2:
			if l1:
				x = l1.val
			else:
				x = 0
			if l2:
				y = l2.val
			else:
				y = 0
			summ = carry + x + y
			carry = summ // 10
			num = summ % 10
			res.next = ListNode(num)
			res = res.next
			if l1:
				l1 = l1.next
			if l2:
				l2 = l2.next
		if carry != 0:
			res.next = ListNode(1)
	return result.next

其实本身这题并不难,但是我觉得这题对于使用 Python 写链表的题是个比较好的示例。链表结构隐含在节点的属性里 next 里,如果当前节点有下一节点,则其 next 属性就指向下一个节点,这时 next 就是下一节点的引用。
首先构建用于输出的结果链表,我这里是用了一个 True 当做 header 占位,当然也可以用 0 之类的,然后就是循环获得 l1、l2 的节点值,carry 用来进位,每增加一个节点,记得把 res 重新指向最后一个节点。
考虑边界情况,就是加法结果的最高位溢出的情况,如果这种情况发生,就再给结果链表增加一个值为 1 的节点。
最后要注意的就是返回应该是结果链表去掉 header 的剩余部分,即 result. next 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值