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)。