LeetCode——Add Two Numbers
阿新 • • 發佈:2022-05-04
題目:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8
解題過程:
1、分析
本道題就是考查的是連結串列的操作,此處有兩個注意點:
- 連結串列的頭結點
- 進位(程式中的add變數)
2、思路
對連結串列1和連結串列2中的每個元素相加,取模(%)放入result連結串列中,除(/)放入add變數中,最終需要考慮是否add中還有值,這是進位。
程式程式碼
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l1_r = l1; ListNode l2_r = l2; ListNode result = null;// 作為返回值 // 處理第一個結點 int add = 0;// 進位 int s = l1_r.val + l2_r.val + add; result = new ListNode(s % 10); add = s / 10; l1_r = l1_r.next; l2_r = l2_r.next; //上面的result作為頭結點的指標 ListNode l3_r = result;//l3_r作為連結串列的指標遍歷 while (l1_r != null || l2_r != null) { // 同時都不為null ListNode l3 = null; int sum = 0; if (l1_r != null && l2_r != null) { sum = l1_r.val + l2_r.val + add; l3 = new ListNode(sum % 10); add = sum / 10; // 後移 l1_r = l1_r.next; l2_r = l2_r.next; } else if (l1_r != null && l2_r == null) { sum = l1_r.val + add; l3 = new ListNode(sum % 10); add = sum / 10; // 後移 l1_r = l1_r.next; } else { sum = l2_r.val + add; l3 = new ListNode(sum % 10); add = sum / 10; // 後移 l2_r = l2_r.next; } l3_r.next = l3; l3_r = l3_r.next; } //判斷最後的add /** * 最後會有一種情況就是連結串列的計算都結束了,但是add中還有進位,此時要注意的是計算進位 */ if (add != 0){ ListNode last = new ListNode(add); l3_r.next = last; } return result; }