LeetCode的第2題是Add Two Numbers。
題目描述
給了兩個非空且非負整數的鏈表。每個節點只能存儲一位數字。將兩個數字相加,並以相同形式返回一個新的鏈表。
解題想法
這題的關鍵在於如何處理兩個鏈表的對應節點進行相加,以及處理進位問題。
1.從鏈表的頭部開始遍歷,對應節點相加。
2.若兩個節點的和大於或等於10,則需要向下一位進位。
3.當其中一個鏈表遍歷結束時,另一個鏈表還有節點,就要繼續處理未遍歷的部分。
4.如果遍歷完後還需要進位,則要在結果鏈表的尾部添加一個節點。
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0); //用於記錄結果鏈表的頭節點
ListNode current = dummy; //當前指針
int carry = 0; //記錄進位
while (l1 != null || l2 != null || carry != 0) {
int val1 = (l1 != null) ? l1.val : 0;//若l1不為空,取它的值,否則取0
int val2 = (l2 != null) ? l2.val : 0;//若l2不為空,取它的值,否則取0
int sum = val1 + val2 + carry; //將兩個節點的值和進位加起來
carry = sum / 10; //計算新的進位
current.next = new ListNode(sum % 10); //計算當前節點的值
current = current.next;
if (l1 != null) l1 = l1.next;//如果l1還有下一個節點,移動到下一個節點
if (l2 != null) l2 = l2.next;//如果l2還有下一個節點,移動到下一個節點
}
return dummy.next; //返回結果鏈表的頭節點
}
}