有人能看看java LinkedList的m remove()方法吗?
这是我的密码:有人能看看java LinkedList的m remove()方法吗?,java,Java,这是我的密码: public boolean remove(T item) { int index = 0; if(contains(item)){ Node<T> current = first.getNext(); for(int i = 0; i<size; i++){ if((current.getData()).equals(item)){ index = i;
public boolean remove(T item) {
int index = 0;
if(contains(item)){
Node<T> current = first.getNext();
for(int i = 0; i<size; i++){
if((current.getData()).equals(item)){
index = i; //this will be the index of the item to be removed
}
current = current.next;
}
current.setData(null);
System.out.println(index);
System.out.println(size);
for(int i = index; i < size; i++){
if(i < size){
current.setData(current.next.getData());
current = current.next;
}
if(i == size)
current = last;
}
size--;
return true;
}else{
return false;
}
}
公共布尔删除(T项){
int指数=0;
如果(包含(项目)){
节点当前=first.getNext();
对于(int i=0;i您正在为(int i=index;i您正在为(int i=index;i您正在为)做一些问题:
一,
您没有推进索引,因此您基本上将引用设置为自身
二,
为什么要调用if(contains(item))
然后再次查找该项目?我只需要一次就可以了
三,
您应该递增i
而不是索引
,否则循环本身永远不会终止
五,
编辑后,您将看到以下内容:
for(int i = index; i <= size; index++){
if(i < size){
current.setData(current.next.getData());
current = current.next;
}
...
for(int i=index;i一些问题:
一,
您没有推进索引,因此您基本上将引用设置为自身
二,
为什么要调用if(contains(item))
然后再次查找该项目?我只需要一次就可以了
三,
您应该递增i
而不是索引
,否则循环本身永远不会终止
五,
编辑后,您将看到以下内容:
for(int i = index; i <= size; index++){
if(i < size){
current.setData(current.next.getData());
current = current.next;
}
...
for(int i=index;i oops,你说得对。我已将其更改为current.setData(current.next.getData())@user2407420据我所知,这将复制数据。不过,您需要更改节点引用。它将复制数据,但下一项也将更改为后一项,直到它到达末尾。这意味着基本上将每个项目移到一个上,然后减小大小。我还修复了您在第3点中提到的问题,在我读你的答案之前,我刚刚捕捉到了它。我刚刚添加了一个elseGah,我怎么会错过index++,这是正确的,并修复了它。谢谢!哦,你是对的。我已将它更改为current.setData(current.next.getData())@user2407420据我所知,这将复制数据。不过,您需要更改节点引用。它将复制数据,但下一项也将更改为后一项,直到它到达末尾。这意味着基本上将每个项目移到一个上,然后减小大小。我还修复了您在第3点中提到的问题,在我读你的答案之前,我刚刚抓住了它。我刚刚添加了一个elseGah,我怎么会错过index++,这是正确的,并修复了它。谢谢!
for(int i = index; i <= size; index++){
for(int i = index; i <= size; index++){
if(i < size){
current.setData(current.next.getData());
current = current.next;
}
...