我需要递归地编写find方法,当我试图找到x并找到它时 我需要将x移动到链表的头部
例如,如果列表是 头 - > 15 - > 20 - > 5 - > 10
我运行find(5),然后列表将是 头 - > 5 - > 15 - > 20 - > 10
private boolean find (int x)
{
Node pointer = head;
int i = 0;
while(pointer != null)
{
if( pointer.data != x)
{
pointer = pointer.next;
find(x);
}
else
{
return true;
}
}
}
答案 0 :(得分:1)
我认为你应该编写一个递归的辅助方法,例如:
private boolean find(int x, Node node) {
if (node == null)
return false;
return node.data == x || find(x, node.next);
}
然后标准find
就是
private boolean find(int x) {
return find(x, head); // start search from head
}
使用此方法时,添加/删除组件应该难以实现:如果找到了第一个find
方法,则可以删除相应的节点,并将节点添加到列表的前面第二个find
作为包含x
的新节点(假设find(x, head)
返回true)。
答案 1 :(得分:0)
私有布尔查找(int x) { Node retval = recursiveFind(x,head,parent) 如果retVal!= null RetVal.next =头 回归真实 }
私有节点recursiveFind(Int x,节点头,节点父节点) { 如果head == null&& parent == null 返回null;
如果head.value == x Parent.next = head.next: 回头
否则返回recursiveFind(x,head.next,head)
我在使用smatphone但是有类似的东西
一些
答案 2 :(得分:0)
已经有一段时间了,因为我必须玩java和链接列表(并且在没有测试的情况下写在我的头顶),所以这可能无法复制/粘贴,但尝试像这样:
Node linkedListHead = ...;
public void find(int target){
Node foundNode = findRec(target, linkedListHead, null);
if(foundNode != null){
// assumes Node takes in the Data first, then a Node
linkedListHead = new Node(target, linkedListHead);
foundNode.next = foundNode.next.next;
}
}
private void findRec(int target, Node currentNode, Node previousNode){
if(currentNode == null){
return null;
} else if(currentNode.data == target){
return previousNode;
} else {
return find(target, currentNode.next, currentNode);
}
}
重点是在findRec()方法期间保留对前一节点的引用,并将其返回到包含搜索目标的下一个节点之后,并从列表中删除。