題目:2. 兩數(shù)相加
題目描述:
給出兩個(gè) 非空 的鏈表用來表示兩個(gè)非負(fù)的整數(shù)。其中,它們各自的位數(shù)是按照 逆序 的方式存儲(chǔ)的,并且它們的每個(gè)節(jié)點(diǎn)只能存儲(chǔ) 一位 數(shù)字。
如果,我們將這兩個(gè)數(shù)相加起來,則會(huì)返回一個(gè)新的鏈表來表示它們的和。
您可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)都不會(huì)以 0 開頭。
示例 1:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
解題思路
- l1 鏈表 和 l2鏈表 同步 往后 相同位置 節(jié)點(diǎn)的值 相加
- 當(dāng)前位兩個(gè)節(jié)點(diǎn)的值 計(jì)算后
- 將個(gè)位數(shù)的值 保存到結(jié)果鏈表節(jié)點(diǎn)中
- 進(jìn)位值保存 加入下次計(jì)算
- 全部計(jì)算完后 保存結(jié)果的鏈表 返回即可
源碼
- java:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// 結(jié)果 存放的 鏈表
ListNode temp = new ListNode(0);
ListNode curr = temp;
ListNode p = l1;
ListNode q = l2;
int carry = 0;
while(p != null || q != null || carry > 0){
// l1當(dāng)前節(jié)點(diǎn) 的值
int x = p != null ? p.val : 0;
// l2當(dāng)前節(jié)點(diǎn)的值
int y = q != null ? q.val : 0;
// 此處加的 時(shí)候 注意加上 上一次計(jì)算的 進(jìn)位
int sum = x + y + carry;
// 取進(jìn)位數(shù)
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
p = p == null ? null : p.next;
q = q == null ? null : q.next;
}
return temp.next;
}
}
水平有限,如有問題,請各路大神指正,虛心接納