にすう加算
2つの非負の整数を表す2つの非空のチェーンテーブルが与えられる.ビット数は逆順序で格納され、各ノードには単一の数値しか格納されません.2つの数を加算して新しいチェーンテーブルを返します.数字0以外の2つの数字はゼロで始まると仮定できます.
例:
この問題を見始めたばかりのとき、私はただの菜鳥だった.最も基本的なチェーン時計は何なのか分からず、データ構造がすっかり忘れてしまった.
正直に言うと、私は直接見た解析ですが、コードが読めないなんて、私の料理がどこまであるか考えてみてください.
長い間やってやっと分かった.
まずListNodeクラスがあります
そして和を実現する方法です.
入力値:
これは入力した値で、正常に運行することができて、私の上で理解したのが正しいことを知らないで、もし間違いがあれば、指摘してください、ありがとうございます.
例:
:(2 -> 4 -> 3) + (5 -> 6 -> 4)
:7 -> 0 -> 8
:342 + 465 = 807
この問題を見始めたばかりのとき、私はただの菜鳥だった.最も基本的なチェーン時計は何なのか分からず、データ構造がすっかり忘れてしまった.
正直に言うと、私は直接見た解析ですが、コードが読めないなんて、私の料理がどこまであるか考えてみてください.
長い間やってやっと分かった.
まずListNodeクラスがあります
class ListNode {
int val;////
ListNode next;//
ListNode(int x) {//
val = x;
}
}
そして和を実現する方法です.
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);//
ListNode p = l1, q = l2, curr = dummyHead; // ,p l1,q l2,curr
int carry = 0;//
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;// p , p x
int y = (q != null) ? q.val : 0;// q , q y
int sum = carry + x + y; //
carry = sum / 10;//
curr.next = new ListNode(sum % 10);// , curr.next
curr = curr.next;//curr
if (p != null) p = p.next;// p , p p
if (q != null) q = q.next;// q , q q
}
if (carry > 0) {// ,
curr.next = new ListNode(carry);
}
return dummyHead.next;// , .next
}
入力値:
public static void main(String[] args) {
ListNode ln1_1 = new ListNode(2);
ListNode ln1_2 = new ListNode(4);
ListNode ln1_3 = new ListNode(3);
ln1_1.next = ln1_2;
ln1_2.next = ln1_3;
ListNode ln2_1 = new ListNode(5);
ListNode ln2_2 = new ListNode(6);
ListNode ln2_3 = new ListNode(4);
ln2_1.next = ln2_2;
ln2_2.next = ln2_3;
ListNode l3 = addTwoNumbers(ln1_1, ln2_1);
while (l3 != null) {
System.out.print(l3.val + ",");
l3 = l3.next;
}
}
これは入力した値で、正常に運行することができて、私の上で理解したのが正しいことを知らないで、もし間違いがあれば、指摘してください、ありがとうございます.