给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
示例:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295 输出:2 -> 1 -> 9,即912
进阶:假设这些数位是正向存放的,请再做一遍。
示例:
输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295 输出:9 -> 1 -> 2,即912
循环解法
# 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:
p1 = l1
p2 = l2
flag = 0 # 进位flag
first = ListNode(-1) # 创建一个新链表用于存储结果
p = first
while p1 or p2 or flag:
addSum = (p1.val if p1 else 0) + (p2.val if p2 else 0) + flag
flag = addSum // 10
p.next = ListNode(addSum % 10)
p = p.next
p1 = p1.next if p1 else None
p2 = p2.next if p2 else None
return first.next
递归解法
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
return self.addIndividual(l1, l2, 0)
def addIndividual(self, p1, p2, flag):
if not p1 and not p2 and not flag:
return None
value = flag
if p1:
value += p1.val
if p2:
value += p2.val
flag = value // 10
result = ListNode(value % 10)
if p1 or p2:
nextNode = self.addIndividual(p1.next if p1 else None, p2.next if p2 else None, flag)
result.next = nextNode
return result
正向存放时需要先反置链表.
本文介绍了一种使用链表表示的整数求和算法,包括循环解法和递归解法。通过实例展示了如何处理进位操作,适用于链表中数位正向或反向存放的情况。
270

被折叠的 条评论
为什么被折叠?



