class Solution(object):
def addTwoNumbers(self, l1, l2):
“”"
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
“”"
if l1 == None and l2 == None :
return "It's empty!"
carry = 0 #进位
add_temp = 0 #两个数字相加结果
result = ListNode(0) #记录结果
p = l1 #指向L1, 遍历L1
q = l2 #指向L2, 遍历L2
cur = result
if p != None and q != None :
add_temp = p.val + q.val + carry
carry = add_temp/10
result.val = add_temp%10
p = p.next
q = q.next
while p != None and q != None :
add_temp = p.val + q.val + carry
carry = add_temp/10
temp_node = ListNode(0)
temp_node.val = add_temp%10
cur.next = temp_node
cur = cur.next
p = p.next
q = q.next
while p != None :
add_temp = p.val + carry
carry = add_temp/10
temp_node = ListNode(0)
temp_node.val = add_temp%10
cur.next = temp_node
cur = cur.next
p = p.next
while q != None :
add_temp = q.val + carry
carry = add_temp/10
temp_node = ListNode(0)
temp_node.val = add_temp%10
cur.next = temp_node
cur = cur.next
q = q.next
if carry > 0 :
temp_node = ListNode(0)
temp_node.val = carry
cur.next = temp_node
return result
修改后,通过在循环里面增加判断,缩短了代码。另外,头结点直接不存储结果,直接返回头结点的下一个结点,也缩短了代码:
class Solution(object):
def addTwoNumbers(self, l1, l2):
“”"
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
“”"
if l1 == None and l2 == None :
return "It's empty!"
carry = 0 #进位
add_temp = 0 #两个数字相加结果
result = ListNode(0) #记录结果
p = l1 #指向L1, 遍历L1
q = l2 #指向L2, 遍历L2
cur = result
while p != None or q != None :
if p != None :
x = p.val
else :
x = 0
if q != None :
y = q.val
else :
y = 0
add_temp = x + y + carry
carry = add_temp/10
cur.next = ListNode(add_temp%10)
cur = cur.next
if p != None :
p = p.next
if q != None :
q = q.next
if carry > 0 :
cur.next = ListNode(carry)
return result.next
笔记:
单链表创建:temp_node = ListNode(0)
注意if与while的区别
修改后,通过在循环里面增加判断,缩短了代码。另外,头结点直接不存储结果,直接返回头结点的下一个结点,也缩短了代码。