今天遇到了链表结构,猛然想起这不是数据结构中的经典内容么,然而还有多少记忆呢?不过,这应该不是重点,现在的学习方法本就是practise.题目如下:
首先冒出脑海的是,将每个链表中的数转化为十进制,求和之后再逆序存储进新的链表。但是,测试运行成功,提交失败,代码如下:
import math
# 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:
#l3=ListNode(None)
#l3=l1
#两位数以上的情况
#遍历每个节点获取十进制数
value1=0.0
n1=1
if l1.next==None:
value1=l1.val
else:
while l1.next!=None:
value1+=l1.val*math.pow(10,n1-1)
n1+=1
l1=l1.next
#尾结点的和计算
value1+=l1.val*math.pow(10,n1-1)
value1=int(value1)
#同理求解第二个链表
value2=0.0
n2=1
if l2.next==None:
value2=l2.val
else:
while l2.next!=None:
value2+=l2.val*math.pow(10,n2-1)
n2+=1
l2=l2.next
value2+=l2.val*math.pow(10,n2-1)
value2=int(value2)
#求和
value3=value1+value2
#存储链表
#计算到最后l3为单个节点,要输出链表内容,另定义temp
temp=l3=ListNode(None)
l3.next=ListNode(value3%10)
l3=l3.next
while value3//10!=0:
value3=value3//10
l3.next=ListNode(value3%10)
l3=l3.next
return temp.next
后来,参考别人的方法,按“位”计算,提交成功,代码如下:
import math
# 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:
s,s1,s2=0,0,0
temp=l3=ListNode(None)
while l1 or l2 or s:
s1=l1.val if l1 else 0
s2=l2.val if l2 else 0
s+=s1+s2
l3.next=ListNode(s%10)
l3=l3.next
s//=10
l1=l1.next if l1 else None
l2=l2.next if l2 else None
return temp.next
现在还没找出第一个方法的错误原因,总不至于是数字精度的原因吧?留着这个问题,看什么时候能灵光乍现……