【python】【leetcode】【算法题目2—Add Two Numbers】

一、题目描述

题目原文:

 You are given two linked lists representing two non-negative numbers.

 The digits are stored in reverse order and each of their nodes contain a single digit.

 Add the two numbers and return it as a linked list.

(两个单链表分别表示两个非负整数,表示形式为:数字个位—>数字十位—>数字百位........请以相同的单链表的形式返回两个数的和的结果)

举例:

 Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
 Output: 7 -> 0 -> 8

举例:

 Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
 Output: 7 -> 0 -> 8

注意:最终结果要用链表结构表示,返回指向首节点的对象(Python中一切皆对象)。

 

二、题目分析

 我想到的思路比较直接:先把俩个数字用列表表示出来,再转化为整型后进行相加,最后构造相加结果的单链表返回即可。

三、Python代码

#题目中定义的单链表类的结构如下:
#class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        l1,l2为输入的待加和的两个串
        """
        
        #将两个单链表串按位扫到列表listnum1和listnum2中
        listnum1 = []
        listnum2 = []
        while l1 != None:
            listnum1.append(l1.val)
            l1 = l1.next
        while l2 != None:
            listnum2.append(l2.val)
            l2 = l2.next
        
        #将两个数用整型num1和num2表示出来(**运算为指数运算,eg. 2 ** 3 结果为8)
        num1 = 0
        num2 = 0
        for i in range(len(listnum1)):
            num1 = listnum1[i] * (10 ** i) + num1
        for j in range(len(listnum2)):
            num2 = listnum2[j] * (10 ** j) + num2
            
        #计算结果后,构造结果的单链表结构l3
        result = num1 + num2
        l3 = ListNode(0)
        p = ListNode(0)
        p = l3
        #l3和p指向首节点,构造过程中l3不动,仍指向首节点,p进行构造移动
        while result >= 10:
            temp = ListNode(None)
            p.val = result % 10
            p.next = temp
            p = temp
            result = result / 10
        #由于循环到最后一个节点时不再构造新节点,于是退出循环,并给最后一个节点赋值
        p.val = result % 10
        return l3

 

 

四、其他

题目链接:https://leetcode.com/problems/add-two-numbers/

Runtime: 128ms

想法不够优化,欢迎大家留言交流~

 

你可能感兴趣的:(leetcode,-,python实现)