LeetCode No2 兩數相加
阿新 • • 發佈:2022-04-06
題目
給你兩個 非空 的連結串列,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。
請你將兩個數相加,並以相同形式返回一個表示和的連結串列。
你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
示例 1:
輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
提示:
每個連結串列中的節點數在範圍 [1, 100] 內
0 <= Node.val <= 9
題目資料保證列表表示的數字不含前導零
思路
題目意思很明確,可以直接理解為一個大數加法,先定義一個進位符c,然後將兩個連結串列按照對應的位數上相加再加上進位符c作為結果,如果超出10,對10取餘,然後進位符c置為1,迴圈相加到兩個連結串列都迴圈完,兩個連結串列都遍歷完後,注意進位,如果進位不為0,還需再要加上進位符c。
AC程式碼
點選檢視程式碼
class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if( l1==null ) { return l2; } if( l2 == null ) { return l1; } int a = l1.val; int b = l2.val; int c = (a+b)/10; int d = (a+b)%10; l1 = l1.next; l2 = l2.next; ListNode l3 = new ListNode(d); ListNode l4 = l3; while( l1!=null || l2!=null ) { a = l1==null?0:l1.val; b = l2==null?0:l2.val; d = (a+b+c)%10; l4.next = new ListNode(d); c = (a+b+c)/10; if( l1!=null) { l1 = l1.next; } if( l2!=null ) { l2 = l2.next; } l4 = l4.next; } if( c!=0 ) { l4.next = new ListNode(1); } return l3; } }