問題描述
給定兩個用鏈表表示的整數,每個節點包含一個數位。
這些數位是反向存放的,也就是個位排在鏈表首部。
編寫函數對這兩個整數求和,並用鏈表形式返回結果。
示例:
輸入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
輸出:2 -> 1 -> 9,即912
方法一
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//在相加過程中是否出現進位
boolean isCarry = false;
ListNode dumpy = new ListNode(-1);
ListNode tmp = dumpy;
while(l1!=null||l2!=null){
//記錄當前 位上的值,默認爲0
int x = 0,y = 0;
if(l1!=null){
x = l1.val;
l1 = l1.next;
}
if(l2!=null){
y = l2.val;
l2 = l2.next;
}
//求和並且判斷是否有進位
int result = x + y;
if(isCarry){
result++;
}
if(result>9){
isCarry = true;
}else{
isCarry = false;
}
//記錄結果值
tmp.next = new ListNode();
tmp.next.val = result%10;
tmp = tmp.next;
}
if(isCarry){
tmp.next = new ListNode();
tmp.next.val = 1;
tmp = tmp.next;
}
return dumpy.next;
}
}