解題思路: 1,建立一個preHead,這樣方便處理第一次運算; 2,加一個carry用於儲存 進位元; 3,每一位的運算,都包括 l1.val + l2.val + carry 4,每一次運算結果,都通過 除法和求餘運算,得到 carry和當前位的數字
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # @param {ListNode} l1 # @param {ListNode} l2 # @return {ListNode} def addTwoNumbers(self, l1, l2): dummy = temp = ListNode(0) carry = 0 while l1 or l2 or carry: res = 0 if l1: res += l1.val l1 = l1.next if l2: res += l2.val l2 = l2.next res += carry temp.next = ListNode(res % 10) temp = temp.next carry = res // 10 return dummy.next
// Java 實現
public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode p = dummy; int carry = 0; while(l1 != null || l2 != null){ int x = (l1 != null ? l1.val : 0); int y = (l2 != null ? l2.val : 0); int ret = x + y + carry; p.next = new ListNode(ret%10); p = p.next; carry = ret/10; if (l1 != null) l1 = l1.next; if (l2 != null) l2 = l2.next; } if (carry > 0){ p.next = new ListNode(carry); } return dummy.next; }}