您的位置:首页 > 编程语言 > C语言/C++

leetcode(二)—— Add Two Numbers(Python/C++)

2016-04-11 09:48 543 查看
Add Two Numbers | LeetCode OJ

逻辑是简单的,主要是处理进位,以及两序列长度不一致的情况;

Python

# 链表结点定义
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None

# 为链表添加新的元素
def addTail(l, node):
if l.next is None:
l.next = node
else:
p = l.next
while p.next:
p = p.next
p.next = node

class Solution(object):
def addTwoNumbers(self, l1, l2):
carrier = 0
x, y = l1.val, l2.val
if x+y>=10:
carrier = 1
l = ListNode(x+y-10)
else:
l = ListNode(x+y)
while l1.next and l2.next:
x, y = l1.next.val, l2.next.val
if x+y+carrier>=10:
addTail(l, ListNode(x+y+carrier-10))
carrier = 1
else:
addTail(l, ListNode(x+y+carrier))
carrier = 0
l1 = l1.next
l2 = l2.next

# 以下两个 while 循环处理长度不一致的情况
while l1.next:
if l1.next.val+carrier >= 10:
addTail(l, ListNode(l1.next.val+carrier-10))
carrier = 1
else:
addTail(l, ListNode(l1.next.val+carrier))
carrier = 0
l1 = l1.next
while l2.next:
if l2.next.val+carrier >= 10:
addTail(l, ListNode(l2.next.val+carrier-10))
carrier = 1
else:
addTail(l, ListNode(l2.next.val+carrier))
carrier = 0
l2 = l2.next

# 还有进位
if carrier == 1:
addTail(l, ListNode(1))
return l
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: