1. 程式人生 > >給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。

題目描述:

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。

你可以假設除了數字 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 int
x = (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.對整數相加的演算法設計的考察:每一位依次相加,有進位