1. 程式人生 > 其它 >有狀態元件 & 無狀態元件 <React>

有狀態元件 & 無狀態元件 <React>

給你兩個非空 的連結串列,表示兩個非負的整數。它們每位數字都是按照逆序的方式儲存的,並且每個節點只能儲存一位數字。

請你將兩個數相加,並以相同形式返回一個表示和的連結串列。

你可以假設除了數字 0 之外,這兩個數都不會以 0開頭。

Example:

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

判斷好進位和空陣列,陣列長度不一致的情形即可

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