題目
給定兩個非空鏈表來表示兩個非負整數。位數按照逆序方式存儲,它們的每個節點只存儲單個數字。將兩數相加返回一個新的鏈表。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
思考:加法的運算方式即是低位求和,若大於9則高位進1。位數逆序存入鏈表,則開始節點即是個位,位數依次遞增。
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode(0);
ListNode tmpNode = result;
int a;
int b;
while (l1 != null || l2 != null) {
{
// 如果l1不爲空,a=l1的值,l1指向next,否則a=0。
if (l1 != null) {
a = l1.val;
l1 = l1.next;
} else {
a = 0;
}
// 如果l2不爲空,b=l2的值,l2指向next,否則b=0。
if (l2 != null) {
b = l2.val;
l2 = l2.next;
} else {
b = 0;
}
// 求和
int temp = a + b + tmpNode.val;
if (temp < 10) {
// 如果和小於10,則把和賦給當前節點
tmpNode.val = temp;
// 如果l1和l2都爲空,則不再產生下一個節點
if (l1 != null || l2 != null) {
tmpNode.next = new ListNode(0);
}
} else {
// 如果和大於10,則把和的個位賦給當前節點
tmpNode.val = temp - 10;
// 產生下一個值爲1的節點
tmpNode.next = new ListNode(1);
}
// 指向下一個節點
tmpNode = tmpNode.next;
}
}
return result;
}