私はJavaのリンクリストクラスを使用しないプログラムで作業しています。私は一からそれを構築しています。私はリンクされたリストの特定の位置にノードを挿入するメソッドを書くこと以外はすべて成功しています。リンクリストの途中にノードを挿入して誤ってヌルノードも挿入します
特定のノードを「現在の」ノードとして設定するメソッドがあります。ですから、例えば、私はこのようになり、リンクされたリストを持っている:猫 - >犬 - >良い - - >ペット、そして「現在」に等しい>はが作ります2;これは、「現在の」ノードが「犬」であることを意味します。
ここからは、情報フィールドがとの "current"の位置に新しいNodeを挿入したいとしましょう。正しく行わ場合は、最後のリンクリストは次のようになります。猫 - >と - >良い - - >作る ->は犬>ペット。 "そして"位置2の "犬"を置き換えます。
私の方法は2番目の位置に新しいノードを挿入するように機能しますが、新しく作成されたノードを既存のノードにリンクする際に問題が起こります。新しいノードをリストに挿入するだけでなく、 "dogs"の前に情報のないノードを挿入しています。私のコードは、現在実行されると、出力は次のようになります。 - >と - >(空白) - 猫>犬 - >良い - - >ペット>はを作ります。
私は99.9%の問題がコードの(現在の!= nullの)部分にあると確信していますが、私はそれを修正する方法を理解できません。
私が実際に追加したいノードに加えて空白のノードを挿入している理由は何ですか?
public void insert() {
System.out.println("Please enter the text you wish to insert, or type \"end\" if you are done inserting.");
String theString;
theString = console.nextLine();
while (!theString.equals("end")){
newNode = new Node();
newNode.info = theString;
newNode.next = null;
if (first == null){
first = newNode;
last = newNode;
} else if (current != null){
Node p = new Node (current.info, current.next);
current.info = newNode.info;
current.next = p;
}
else {
last.next = newNode;
last = newNode;
}
System.out.println("Please enter the text you wish to insert, or type \"end\" if you are done inserting.");
theString = console.nextLine();
}
}
EDIT
プログラム全体は非常に長いが、ここでユーザーは自分にノードを挿入することを望むどの位置に等しい電流設定「setLine」方法です。これは、ユーザプロンプトを介して取得されるパラメータ "int line"をとる。
public Node setLine(int line) {
int index = 0;
current = first;
while (index < line) {
previous = current;
current = current.next;
index++;
}
return current;
}
このタイプのものは、一般的にはSystem.out.println呼び出しが多数あり、ステップバイステップで作業する必要があります。これは実際にはかなり一般的な問題ですが、あなた自身を理解する必要があります。 –
2番目の新しいノードを作成する場合は疑わしいことに注意してください。 –
'コンソール'、 'java.util.Scanner'とは何ですか? –