再帰を使用してリンクリストの最後にノードを挿入しています。コードは正常に動作します。しかし、私はリターンステートメントと少し混乱しています。 -再帰を使用する場合のreturn文の混同
を二を行うにはより多くの何もで作成されたノードを返しません
最初のリターンは、新しいノードhead == null
と機能が終了します返します。私の理解の一つ一つを通って行く
末尾は何もしません。
最後に、insertNodeAtTailが再帰的に呼び出されるたびに、すべてのノードがスタックに置かれます。 2回目の返品がhead.next == null
と呼び出されたとき。すべてのノードが最初のノードに到達するまでスタックからポップされます。リンクされたリストの最初のノード(頭を指す)として効果的です。
私の理解は正しいですか?
public Node insertNodeAtTail(Node head, int data) {
if(head == null) {
/* List is empty so just return the new node */
Node node = new Node();
node.data = data;
node.next = null;
return node;
}
else if (head.next == null) {
/* We are at the end of the list so insert the new node */
Node node = new Node();
node.data = data;
head.next = node;
return head;
}
else {
/* Travese the list by passing the next node in the list until next is NULL */
insertNodeAtTail(head.next, data);
}
/* This will put all the head nodes on the stack and then pop them off at the end */
return head;
}
任意の提案のための多くのおかげで、
を行います。戻り値のポイントが何であるか分かりません。使用されていません。 – Zarwan
@ Zarルートノードは常に返されるので、何かが追加されるたびにルートノードを取得するのはおそらく存在します。 – EvilTak
最初のケース( 'head == null')はListに何も追加しません(つまり、あなたのメソッドによって返されたNodeをListの' head'メンバーに代入しない限り)あなたのメソッドは空のリストでは機能しません) – Eran