とリンクリストの要素のすべてのオカレンスリスト再帰を使用してリストし、LLNodeオブジェクトを返します。私のコードでは、概念的には、ノード(すなわちノード1)が指定された要素(ノード2)の出現を持つノードを指しているかどうかを特定しようとしています。そうであれば、代わりにnode1にnode2はを指しています。要素の最初の発生を削除し、私は<em>が私のリンクから1つの出現または文字列の出現をすべて削除するには</em>と<em>DELETEALL</em>方法を削除実装しようとしています再帰
私のコードは大部分は機能しますが、私が実行している問題はリストの最初のノードをスキップしているようです。
public class LinkedTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
LLNode<String>list = new LLNode<>("susan");
list = addNode(list, "matt");
list = addNode(list, "susan");
list = addNode(list, "bob");
list = addNode(list, "matt");
printNodes(list);
list = deleteAll(list, "susan");
System.out.println("\nPrint nodes forward after delete of susan");
printNodes(list);
list = deleteAll(list, "matt");
System.out.println("\nPrint nodes forward after delete of matt");
printNodes(list);
}
public static LLNode<String> addNode(LLNode<String> list, String info) {
LLNode<String> newNode = new LLNode<>(info);
newNode.setLink(list);
list = newNode;
return list;
}
public static void printNodes(LLNode<String> node) {
System.out.println("Print list forward");
while (node != null) {
System.out.println(node.getInfo());
node = node.getLink();
}
}
public static LLNode<String> delete(LLNode<String> node, String name){
if(node.getLink().getInfo() != name){
delete(node.getLink(), name);
}
node.setLink(node.getLink().getLink());
return node;
}
public static LLNode<String> deleteAll(LLNode<String> node, String name){
if(node.getLink() != null){
deleteAll(node.getLink(), name);
if(node.getLink().getInfo() == name){
node.setLink(node.getLink().getLink());
}
}
return node;
}
}
これを実行すると、これが結果です:あなたは「マット」の最初のインスタンスが削除されていないことを確認することができ、出力で
Print list forward
matt
bob
susan
matt
susan
Print nodes forward after delete of susan
Print list forward
matt
bob
matt
Print nodes forward after delete of matt
Print list forward
matt
bob
。同じ問題はメソッドを実装するときに発生します。 ご迷惑をおかけして申し訳ございません。
私はこれまでと同様のものを実装しようとしていましたが、私を引き上げるのは再帰呼び出しの場所でした。これははるかに理にかなっています、ありがとう! – Mac
また、私はこれを捕まえることができましたが、_delete_はLLNode引数と文字列引数の両方を取ります。 String引数として_name_を追加しました。これは完全に機能しました。 – Mac
他のリーダー用に修正されました。 –