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

来源:互联网 发布:简易画地图软件 编辑:程序博客网 时间:2024/05/17 07:12

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 = nodeclass 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
0 0
原创粉丝点击