美文网首页
LeetCode:求两个链表中存储的数值的和

LeetCode:求两个链表中存储的数值的和

作者: 前端艾希 | 来源:发表于2019-07-12 15:18 被阅读0次

About

挑战LeetCode第三天,今天选择了一道链表的题,本来觉得很简单的,但是不知道为什么同样的测试样例在我电脑上能跑,在LeetCode上就跑不了,折腾很长时间未能解决,心情很差。。。

两数求和

描述

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路

如果考虑性能的话,则需要遍历一个短链表,如果不考虑性能则可以直接遍历两个列表,我的方法简单粗暴,直接遍历两个列表

  1. 定义一个getData方法,直接将两个链表遍历一遍,返回链表对应的十进制整型数值
  2. 将返回的整型数值转成字符串(可迭代)
  3. for遍历字符串,然后将字符元素插入到新的链表中

代码

#-*- coding:utf-8 -*-
#Author: Bing Xu

import math
# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    def getData(self, linklist):
        value = 0
        n = 0
        while linklist:
            value += linklist.val * math.pow(10, n)
            linklist = linklist.next
            n += 1
        return value

    def addTwoNumbers(self, l1, l2):
        value1 = self.getData(l1)
        value2 = self.getData(l2)
        sum = str(int(value1 + value2))
        cur = ''
        for item in sum:
            node = ListNode(int(item))
            temp = cur
            node.next = temp
            cur = node
        return cur

运行结果

LeetCode一直给我报错,但是我将它的测试用例在我的环境下输入,可以得到结果(是符合预期的):

// 这里为了简单没有再写一个链表生成的方法
 l1 = ListNode(2)
l1.next = ListNode(4)
l1.next.next = ListNode(3)

l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)

solve = Solution()
l3 = solve.addTwoNumbers(l1, l2)
while l3:
    print(l3.val)
    l3 = l3.next
image.png

相关文章

网友评论

      本文标题:LeetCode:求两个链表中存储的数值的和

      本文链接:https://www.haomeiwen.com/subject/mdiekctx.html