LeetCode 02 兩數相加
阿新 • • 發佈:2020-10-21
LeetCode02 兩數相加
題目描述
給出兩個非空的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
tips:
- 逆序的儲存,更加方便了我們的遍歷
樣例
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
演算法分析
模擬
-
從頭開始遍歷兩個連結串列,
l1
指向第一個連結串列,l2
指向第二個連結串列,取l1
l2
當前的值,t = l1.val+l2.val
,t%10
.生成新節點,值為
t%10
,t/10
為進位,繼續往後走 -
注意:最後可能t還是有值,表示還要進位
時間複雜度\(O(n+m)\)
\(n\)與\(m\)表示分別兩個連結串列的長度
Java程式碼
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(0); ListNode cur = dummy; int t = 0; while(l1!=null||l2!=null){ if(l1!=null){ t += l1.val; l1 = l1.next; } if(l2!=null){ t += l2.val; l2 = l2.next; } cur.next = new ListNode(t%10); t /= 10; //保留進位 cur = cur.next; } if(t!=0){ cur.next = new ListNode(t); } return dummy.next; } }