将项目移动到 LinkedList 的前面
move item to the front of the LinkedList
我的方法是首先在列表中查找某个元素,如果为真,则将包含该值的节点移动到列表的前面,而不创建或删除新的 nodes.here 是我目前所拥有的,我不认为移动节点部分在工作,任何帮助都非常感谢!
public boolean findMove(E e){
Node previous=null;
Node current=head;
while(current !=null){
if(e.equals(current.item)){
previous.next=current.next;
current.next=head;
head=current;
System.out.println("True");
return true;
}
current=current.next;
}
System.out.println("False");
return false;
}
你能试试这个吗?您似乎没有更新 previous
.
public boolean findMove(E e){
Node previous=head;
Node current=head;
while(current !=null){
if(e.equals(current.item)){
//Found the item
previous.next=current.next;
current.next=head;
head=current;
System.out.println("True");
return true;
}
previous = current;
current=current.next;
}
System.out.println("False");
return false;
}
您的代码有几个问题:
- 在循环中,对 head 的引用没有存储在任何地方。假设 head 是起点,你不应该改变它。但是在循环内部,由于 "current" 被更新为指向下一个节点,head 不再是 LinkedList 的有效起点。
- 如果您在第一个位置(头节点)找到该项目,则不应移动它(检查 previous = null)。
有了上面的东西试试这个:
public boolean findMove(E e){
Node previous=null;
Node current=head;
Node headerNode = head;
while(current !=null){
if(e.equals(current.item) && previous != null){
// Update the previous node to point to the next node
previous.next=current.next;
// Move the current node to point to the starting position
current.next=headerNode;
// Mark the current node as header node
headerNode=current;
System.out.println("True");
return true;
}
// Not found - Update Previous to point the current node
previous = current;
current=current.next;
}
System.out.println("False");
return false;
}
我的方法是首先在列表中查找某个元素,如果为真,则将包含该值的节点移动到列表的前面,而不创建或删除新的 nodes.here 是我目前所拥有的,我不认为移动节点部分在工作,任何帮助都非常感谢!
public boolean findMove(E e){
Node previous=null;
Node current=head;
while(current !=null){
if(e.equals(current.item)){
previous.next=current.next;
current.next=head;
head=current;
System.out.println("True");
return true;
}
current=current.next;
}
System.out.println("False");
return false;
}
你能试试这个吗?您似乎没有更新 previous
.
public boolean findMove(E e){
Node previous=head;
Node current=head;
while(current !=null){
if(e.equals(current.item)){
//Found the item
previous.next=current.next;
current.next=head;
head=current;
System.out.println("True");
return true;
}
previous = current;
current=current.next;
}
System.out.println("False");
return false;
}
您的代码有几个问题:
- 在循环中,对 head 的引用没有存储在任何地方。假设 head 是起点,你不应该改变它。但是在循环内部,由于 "current" 被更新为指向下一个节点,head 不再是 LinkedList 的有效起点。
- 如果您在第一个位置(头节点)找到该项目,则不应移动它(检查 previous = null)。
有了上面的东西试试这个:
public boolean findMove(E e){
Node previous=null;
Node current=head;
Node headerNode = head;
while(current !=null){
if(e.equals(current.item) && previous != null){
// Update the previous node to point to the next node
previous.next=current.next;
// Move the current node to point to the starting position
current.next=headerNode;
// Mark the current node as header node
headerNode=current;
System.out.println("True");
return true;
}
// Not found - Update Previous to point the current node
previous = current;
current=current.next;
}
System.out.println("False");
return false;
}