将项目移动到LinkedList的前面

时间:2015-05-09 04:07:18

标签: java linked-list nodes

我的方法是首先在列表中找到某个元素,如果为true,则节点包含的值被移动到列表的前面,而不创建或删除新节点。这是我到目前为止,我不认为移动节点部分正在工作,任何帮助都很感激!

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;
}

2 个答案:

答案 0 :(得分:2)

你可以试试这个吗?您似乎没有更新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;
}

答案 1 :(得分:0)

您的代码几乎没有问题:

  • 在循环中,对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;
}