第二题:
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
Hide Tags Linked List Math
花了一个小时学了下python~感觉python好爽。。。。
第一个算法写得磕磕绊绊。。。代码乱得一塌糊涂:
# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def __str__(self):
temp = self
ret = None
while temp != None:
if ret == None:
ret = str(temp.val)
else:
ret = ret+"->"+str(temp.val)
temp = temp.next
return ret
class Solution:
# @return a ListNode
def addTwoNumbers(self, l1, l2):
t1 = l1
t2 = l2
ret = None
plusone = False
while t1 != None or t2 != None:
p = ListNode(0)
if ret == None:
ret = p
pre = p
else:
pre.next = p
if t1 != None:
p.val = p.val + t1.val
if t2 != None:
p.val = p.val + t2.val
if plusone:
p.val = p.val + 1
plusone = False
if p.val > 9:
p.val = p.val - 10
plusone = True
pre = p
if t1 != None:
t1=t1.next
if t2 != None:
t2=t2.next
else:
if plusone:
p = ListNode(1)
pre.next = p
return ret
后面改造了一下:
class Solution:
# @return a ListNode
def addTwoNumbers(self, l1, l2):
ret = None
p3 = None
p1 = l1
p2 = l2
carry = False
while p1 != None or p2 != None:
count = 0
if p1 != None:
count += p1.val
p1 = p1.next
if p2 != None:
count += p2.val
p2 = p2.next
if carry:
count += 1
carry = False
if count > 9:
count -= 10
carry = True
if p3 == None:
p3 = ListNode(count)
ret = p3
else:
p3.next = ListNode(count)
p3 = p3.next
else:
if carry:
p3.next = ListNode(1)
return ret
回顾一下指针的感觉~