1、首先的思路很简单,很快就想到先把链表中的数连在一起转化成整数,然后开始相加。将得到的和再逆序输出就完事了。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 对链表内的数进行相加
num1 = 0
n = 0
while l1 != None:
num1 = l1.val * (10 ** n) + num1
l1 = l1.next
n += 1
num2 = 0
n = 0
while l2 != None:
num2 = l2.val * (10 ** n) + num2
l2 = l2.next
n += 1
sum = num1 + num2
# 对和进行逆序输出
head = ListNode(0)
if sum == 0:
return head
p = head
while sum >= 1:
head.next = ListNode(sum % 10)
head = head.next
sum = int(sum/10)
return p.next
可是很快就遇到问题了。。这里没有考虑到精度的问题(int型相加的最大长度是32位/64位)。因此直接被测试里面的[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1] 和[5,6,4]焦作人了= =、
2、既然不能够轻易的将所有的数字进行加。。那么只好部分加了。
由于存储的顺序是逆序,那么可以从个位开始相加,保存进位,再和十位进行相加,依此类推。。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
sum = 0
head = ListNode()
p = head
# 同时考虑l1和l2是否为空,考虑sum是要考虑是否要进位的问题
while l1 or l2 or sum:
if l1:
sum += l1.val
l1 = l1.next
if l2:
sum += l2.val
l2 = l2.next
head.next = ListNode(sum % 10)
head = head.next
sum = sum // 10
return p.next