将项目移动到 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;
}