2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

Illustration of Adding two numbers

判断好进位和空数组,数组长度不一致的情形即可

def addTwoNumbers(self,l1,l2):
		result =[]
		carry = False
		index = 0
		while True:
			if index < len(l1) and index < len(l2):
				result.append((l1[index]+l2[index])%10)
				if carry:
					result[-1] = result[-1] +1
					carry = False
				if (l1[index]+l2[index]) >= 10:
					carry = True
				index = index + 1
			else: 
				break
		while index < len(l1):
			if carry:
				tmp = 1 +l1[index]
				result.append(tmp%10)
				if tmp >= 10:
					index += 1
				else:
					carry = False
					result+=(l1[index+1:])
					break
			else:
				result +=(l1[index:])
				break
				
		while index < len(l2):
			if carry:
				tmp = 1 +l2[index]
				result.append(tmp%10)
				if tmp >= 10:
					index += 1
				else:
					carry = False
					result.append(l2[index+1:])
					break
			else: 
				result +=(l2[index:])
				break
		return result
def addTwoNumbers(self, l1, l2):
    if l1 == None: return l2
    if l2 == None: return l1
    flag = 0
    dummy = ListNode(0); p = dummy
    while l1 and l2:
        p.next = ListNode((l1.val+l2.val+flag) % 10)
        flag = (l1.val+l2.val+flag) / 10
        l1 = l1.next; l2 = l2.next; p = p.next
    if l2:
        while l2:
            p.next = ListNode((l2.val+flag) % 10)
            flag = (l2.val+flag) / 10
            l2 = l2.next; p = p.next
    if l1:
        while l1:
            p.next = ListNode((l1.val+flag) % 10)
            flag = (l1.val+flag) / 10
            l1 = l1.next; p = p.next
    if flag == 1: p.next = ListNode(1)
    return dummy.next
posted @ 2021-07-14 22:39  青铜时代的猪  阅读(38)  评论(0)    收藏  举报