有人能看看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;
  }
  ...