2.両数加算Leetcode Java
タイトル:
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.
この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
数値0以外の2つの数は0で始まると仮定できます.
考え方:
1.2つのチェーンテーブルを同じ長さと見なし、短いものがあれば前に0を補充し、例えば964+036=1010;
2.計算のたびに前のキャリーを考慮し、現在の計算後もキャリー値を記録します.
3.2つのチェーンテーブルが移動する後にcarry=1が発見された場合、新しいチェーンテーブルの一番前にノード1が追加される.
4.チェーンテーブルの問題で、結果がヘッダノードである場合、通常、真のヘッダノードheadを指す予めポインタpreを初期化する必要がある.事前ポインタを使用する目的は、チェーンテーブルの初期化時に使用可能なノード値がなく、チェーンテーブル構築プロセスでポインタの移動が必要であり、ヘッダポインタが失われ、結果を返すことができないことです.
// 。 , , 。
//
// , , 。
//
// 0 , 0 。
//
// :
//
// :(2 -> 4 -> 3) + (5 -> 6 -> 4)
// :7 -> 0 -> 8
// :342 + 465 = 807
//
// Related Topics
//leetcode submit region begin(Prohibit modification and deletion)
import java.util.List;
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0);
ListNode cur = pre;
int carry = 0;
while (l1 != null || l2 != null) {
int x = l1 == null ? 0 : l1.val;
int y = l2 == null ? 0 : l2.val;
int sum = x + y + carry;
//
carry = sum / 10;
//
sum = sum % 10;
cur.next = new ListNode(sum);
cur = cur.next;
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
if (carry == 1) {
cur.next = new ListNode(carry);
}
//return pre.next listNode , 。 listNode next , 。
return pre.next;
}
}
//leetcode submit region end(Prohibit modification and deletion)