题目
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字0之外,这两个数都不会以0开头。
思路
1.链表转为List
2.List还原数字
3.两数求和
4.和转为链表
难点
熟悉链表结构
我的答案
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
c1 = 0 #l1和
c2 = 0 #l2和
list1 = [] #l1数字
list2 = [] #l2数字
l3 = ListNode()
#链表转List
while(1):
list1.append(l1.val)
if l1.next == None:
break
else:
l1 = l1.next
while(1):
list2.append(l2.val)
if l2.next == None:
break
else:
l2 = l2.next
#两数求和
p = 1
for i in list1:
c1 += i * p
p = p * 10
q = 1
for j in list2:
c2 += j * q
q = q * 10
c = c1 + c2
#和转链表
list3 = []
r = 10
if c == 0:
l3.val = 0
l3.next = None
return l3
else:
while(c != 0):
v = c % r
list3.append(v/(r/10))
c = c - v
r = r * 10
tale = ListNode()
for i,x in enumerate(list3):
if i==0:
l3.val = x
l3.next = None
tale = l3
else:
lnew = ListNode()
lnew.val = x
tale.next = lnew
tale = lnew
return l3
提交结果
击败5%,就挺拉的。
但是咱通过就是好样滴~
散会~~