- 鏈接:https://leetcode-cn.com/problems/add-two-numbers/
- 代碼地址: https://github.com/xvusrmqj/CodeProblems/tree/master/src/main/java/leetcode_cn
題目:
給出兩個(gè) 非空 的鏈表用來(lái)表示兩個(gè)非負(fù)的整數(shù)疾党。其中黍檩,它們各自的位數(shù)是按照逆序的方式存儲(chǔ)的,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ)一位數(shù)字填渠。
如果,我們將這兩個(gè)數(shù)相加起來(lái)凛捏,則會(huì)返回一個(gè)新的鏈表來(lái)表示它們的和。
您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開(kāi)頭炭分。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
解法:
private ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode(-1);
ListNode point = result;
// 1. 位數(shù)相同的相加
int up = 0;
while (l1 != null && l2 != null) {
int sum = l1.val + l2.val + up; // 兩個(gè)節(jié)點(diǎn)相加再加進(jìn)位
up = sum / 10;
ListNode newNode = new ListNode(sum % 10);
point.next = newNode;
point = point.next;
l1 = l1.next;
l2 = l2.next;
}
// 2. 位數(shù)多的不再相加,直接追加到鏈表
while (l1 != null) {
int sum = l1.val + up;
up = sum / 10;
ListNode newNode = new ListNode(sum % 10);
point.next = newNode;
point = point.next;
l1 = l1.next;
}
while (l2 != null) {
int sum = l2.val + up;
up = sum / 10;
ListNode newNode = new ListNode(sum % 10);
point.next = newNode;
point = point.next;
l2 = l2.next;
}
// 3. 最后一個(gè)如果還有進(jìn)位剑肯,再鏈上捧毛。
if (up != 0) {
ListNode newNode = new ListNode(up);
point.next = newNode;
}
return result.next;
}
總結(jié):
這道題目是“鏈表”的題目,鏈表的題目經(jīng)常就是按照實(shí)際情況一步一步來(lái)让网,代碼可以按照畫(huà)圖來(lái)一步一步寫(xiě)出來(lái)即可呀忧。