java递归地从LinkedList中查找并删除节点
给定一个要搜索的字符串,我想编写一个只接受一个参数(要搜索的字符串)的递归函数。该函数将递归搜索该值,如果找到该值,它将删除该项并返回它。如果没有找到,函数将到达列表的末尾并返回null。到目前为止,我认为我的想法是正确的,只是它运行不正常:
主要测试类别
public static void main(String[] args) {
RecLinkedList list = new RecLinkedList();
list.add("A");
list.add("B");
list.add("D");
list.add("C", 2);
list.add("E", 4);
list.add("G", 6); //this should be invalid
System.out.println( list );
System.out.println( list.remove( 1 ).getValue() );
System.out.println( list.remove("D").getValue() );
System.out.println( list.remove("G").getValue() );
System.out.println( list.size() );
System.out.println( list );
}
链表类(仅显示我需要的帮助)
public class RecLinkedList {
private Node first;
private int size = 0;
public RecLinkedList(){
first = null;
}
public boolean isEmpty() {
return first == null;
}
public Node remove( String s ){
return remove( s, 0, first );
}
private Node remove( String s, int count, Node list ){
if( list == null ){
return null;
}else if( s.equals(s) ){
first = list.getNext();
return list;
}else if( s.equals(count+1) ){
Node n = list.getNext();
if( list.getNext() != null ){
list.setNext( list.getNext().getNext() );
}
return n;
}else{
return remove( s, count+1, list.getNext() );
}
}
到目前为止,我能够删除该项目,但截至目前,项目“A”正在被删除时,它不应该被删除。最后的列表应该是A,C,E(G应该返回并打印null,因为它不存在)。我想我离得很近,但有点小问题,但我似乎想不出来
# 1 楼答案
代码中有几个错误(请参阅下面的注释):
# 2 楼答案
在我看来,你的问题似乎有些模棱两可。我知道你的方法应该搜索一个元素,删除它(如果存在),然后返回相同的对象。如果元素不存在,则该方法应返回null。这看起来很简单,因为大多数实用程序方法都已经在
LinkedList
中实现了。因此,我建议延长该课程:我不明白你为什么想要递归地实现这个
这显然可以写得更简洁,但如果有其他明确的选项,应该会更清楚
编辑:更简洁、可能更好的实现方式是: