如何更好地在链表中找到项目并将其移至最前面
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(...);
您的代码看起来已经很完美了。您的函数内没有创建新节点。只创建了两个节点引用(以前的和当前的)就足够了,逻辑也很优雅:)
我需要编写一个方法 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(...);
您的代码看起来已经很完美了。您的函数内没有创建新节点。只创建了两个节点引用(以前的和当前的)就足够了,逻辑也很优雅:)