如何更好地在链表中找到项目并将其移至最前面

How to better find item in linked list and move it to front

我需要编写一个方法 findMove(E e),它接受一个元素 e 并检查它是否存在于链表中。如果是,函数将元素移动到链表的前面,returns true。否则,它什么也不做,returns false。到目前为止,我的代码如下。

public boolean findMove(E e) {
    Node previous=head;
    Node current=head;
    while(current !=null){
        if(e.equals(current.item)){ // item has been found
            previous.next=current.next;
            current.next=head;
            head=current;
            return true;
        }
        previous = current;
        current=current.next;
    }
    return false;
}

此代码按预期工作,但我想加倍努力并重新编写此代码,这样我就不会创建任何新节点。按照目前的情况,我正在添加一个以前的和当前的节点。

我的问题是,有没有办法重写这段代码,这样我就不会创建任何新节点?

此代码中没有创建新的 Node 实例。

Node previous=head;
Node current=head;

这些只是对现有节点的引用。创建一个新节点将涉及调用 Node:

的构造函数
Node blah = new Node(...);

您的代码看起来已经很完美了。您的函数内没有创建新节点。只创建了两个节点引用(以前的和当前的)就足够了,逻辑也很优雅:)