python中的链表中两数相加,十进制or按位计算?

今天遇到了链表结构,猛然想起这不是数据结构中的经典内容么,然而还有多少记忆呢?不过,这应该不是重点,现在的学习方法本就是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

现在还没找出第一个方法的错误原因,总不至于是数字精度的原因吧?留着这个问题,看什么时候能灵光乍现……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值