Add Two numbers-Leetcode Day 2

2019-01-22  本文已影响0人  码力平平菜鸡熊

1. 问题描述

给定两个非空的链表,两个链表代表着不同的数字,整数的每一位在链表中逆序排列。
例如:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

2. 解答

2.1 自己的答案

2.1.1 思路

最原始的思路,模拟,首先将两个链表所表示的数字转换为int类型,最后相加后,将数字转换为字符串,字符串逆序,最后将逆序后的字符串构造成链表结构即可,最后,返回链表的头节点。

2.1.2 代码

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

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        num1 = 0
        num2 = 0
        counter = 0
        while l1 != None :
            num1 = num1 + l1.val*pow(10, counter)
            l1 = l1.next
            counter = counter + 1
        counter = 0
        while l2 != None:
            num2 = num2 + l2.val*pow(10, counter)
            l2 = l2.next
            counter = counter + 1
        result = num1 + num2
        result = str(result)
        output_str =  result[::-1]
        l3 = ListNode(output_str[0])
        output_str = output_str[1:]
        l3_header = l3 #l3_header保存返回链表的头节点。
        for item in output_str:
            l3.next = ListNode(int(item))
            l3 = l3.next
        return l3_header

so = Solution()
#构造l1, l2 的测试输入 int(l1) =243, int(l2) = 564
l1 = ListNode(2)
l1.next = ListNode(4)
l1.next.next = ListNode(3)
l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)

out = so.addTwoNumbers(l1=l1, l2=l2)
while out != None :
    print(out.val)
    if out.next != None:
        print("->")
    out = out.next

2.1.3 感悟

链表结构的原理是相通的,与C语言不同的是,由于没有指针,可能相对删除和添加的灵活性就会差一点。有时间会使用python构造一遍常用的数据结构。(Flag*1)。

上一篇下一篇

猜你喜欢

热点阅读