給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。
阿新 • • 發佈:2018-11-15
題目描述:
給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
思路:
1.定義連結串列類
2.建立兩個數的連結串列表示物件
3.傳入函式實現相加:每一位相加,設定進位,移到下一位,直到待加連結串列都為空
具體程式碼:
1 public class ListNode { 2 int val; 3 ListNode next; 4 5 ListNode(int x) { 6 val = x;7 } 8 9 } 10 11 public class lkk { 12 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 13 ListNode dummyHead = new ListNode(0); 14 ListNode p = l1, q = l2, curr = dummyHead; 15 int carry = 0;// 進位表示 16 while (p != null || q != null) { 17 intx = (p != null) ? p.val : 0; 18 int y = (q != null) ? q.val : 0; 19 int sum = carry + x + y;// 每一次每一位的相加的結果,都是位之和再加進位 20 carry = sum / 10;// 儲存進位 21 curr.next = new ListNode(sum % 10);// 當前位相加之後的最終表示 22 curr = curr.next; 23 if (p != null)24 p = p.next; 25 if (q != null) 26 q = q.next; 27 } 28 if (carry > 0) { 29 curr.next = new ListNode(carry); 30 }//相加之後若進位有值則和再新增一位 31 return dummyHead.next;//因為curr是初始為,val為0,數字表示實際從它的下一個節點開始 32 } 33 34 }
總結:
1.對連結串列的考察
2.對整數相加的演算法設計的考察:每一位依次相加,有進位