だから私は試験からこの質問を得ました。
片方向リストの末尾から n 番目のノードを取得するにはどうすればよいでしょうか?
各ノードには、値と次 (次の値へのポインター) があります。これが与えられます:
getNodeFromTail(Node head, int x) {
}
したがって、私が行った方法は、リストを一度トラバースしてリストの長さを見つけることです。次に、(長さ - x) ノードを取得します。したがって、合計で 2 回のトラバーサルです。
getNodeFromTail(Node head, int x) {
int length = 0;
Node headdupe = head;
while (headdupe.next != NULL) {
headdupe = headdupe.next;
length++;
}
int a = length--;
for (int y = 0; y < a; y++) {
head = head.next;
}
return head;
}
これは正しいですが、同じことができるかどうかを尋ねるおまけの質問もありますが、1 回だけトラバースします。試験中は思いつかなかったのですが、ある方法を考えた後、あまりよくわかりません。
長さ x の ArrayList を作成できます。その後、while ループを実行するたびに、配列の先頭に要素を追加し、カスケード ダウンして、配列の最後の要素を開始します。次に、ヘッドが null にヒットすると、配列 [x-1] のノードを返します。
これは正しいですか?より良い解決策はありますか?