首先给出题目
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。
给三组测试用例
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
输入:(5) + (5)
输出:0 -> 1
原因:5 + 5 = 10
输入:(2 -> 4 -> 6) + (5 -> 6)
输出:7 -> 0 -> 7
原因:642 + 65 = 707
解题思路
首先将题目中给出的ListNode类研究明白,在进行对链表的具体操作。
从头节点开始逐个相加,和超过9的时候记录进位,并将和的个位数存放在新建链表的节点中,之后一次将节点向后移动。
移动过程中如果遇见空指针,则将该节点置空,在进行加法的时候对空节点进行判断。
下面是代码
# 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:
# 创建结果的链表
start = ListNode(None)
carry = 0
sum = 0
# 用于存储按位计算的结果
node = start
# 存储进位信息和位的和
while(l1 or l2):
# 三目运算符
sum = carry + (l1.val if l1 else 0) + (l2.val if l2 else 0)
node.next = ListNode(sum % 10)
node = node.next
if sum > 9 :
carry = 1
else:
carry = 0
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
if carry == 1:
node.next = ListNode(carry)
return start.next
题目来源于LeetCode官网,如有侵权则删除