Java 删除链接列表中第一个出现的项目

Java 删除链接列表中第一个出现的项目,java,linked-list,Java,Linked List,我正在尝试使用list.first和list.next从链表中删除项目的第一个匹配项。(这不是使用JavaLinkedList) 我已经编写了以下代码,但它删除了所有事件,而不仅仅是第一个: private static <T> Cell<T> remove(T n,Cell<T> list) { Cell<T> ptr; // pointer Cell<T> temp=null; // new empty list

我正在尝试使用
list.first
list.next
从链表中删除项目的第一个匹配项。(这不是使用Java
LinkedList

我已经编写了以下代码,但它删除了所有事件,而不仅仅是第一个:

private static <T> Cell<T> remove(T n,Cell<T> list)
{
   Cell<T> ptr;  // pointer
   Cell<T> temp=null; // new empty list
   for(ptr=list; ptr!=null; ptr=ptr.next) {
     if(!ptr.first.equals(n))
       temp=new Cell<T>(ptr.first,temp); //I guess this is the problem
   }
   if(ptr!=null)
     ptr=ptr.next;
   for(; temp!=null; temp=temp.next)
     ptr=new Cell<T>(temp.first,ptr);
   return ptr;
}
private静态小区删除(tn,小区列表)
{
Cell ptr;//指针
单元格温度=null;//新建空列表
for(ptr=list;ptr!=null;ptr=ptr.next){
如果(!ptr.first.等于(n))
temp=newcell(ptr.first,temp);//我想这就是问题所在
}
如果(ptr!=null)
ptr=ptr.next;
对于(;temp!=null;temp=temp.next)
ptr=新电池(温度优先,ptr);
返回ptr;
}
如果
n
等于
3
list
等于
[1,3,4,5,3,2]
,我得到的结果是
[1,4,5,2]
,但我希望它是
[1,4,5,3,2]


有人能帮我理解我做错了什么吗?

修改原始列表可能比创建新列表更容易。您可以简单地保留一个指向列表头部的指针,并使用当前指针和前一个指针在列表中进行迭代。找到第一个包含n的单元格时,请重新绑定上一个单元格的。下一步跳过当前单元格。这样,您可以立即返回列表的开头,而无需继续递归。

为什么不将第一次删除存储在bool变量“deletedYet”中?if子句是否如下所示:if(!ptr.first.equals(n)| | deletedYet),在第一次删除元素后,将deletedYet初始设置为false,将其设置为true?遍历整个列表,检查每个值并跳过与搜索内容匹配的值,不考虑它是否是第一个匹配。@outlyer您知道如何修改我当前的代码吗。尤其是这条线<代码>如果(!ptr.first.equals(n))temp=new Cell(ptr.first,temp)使用Michael的建议。是的,我已经使用了该方法-从当前列表中删除。我这样做只是因为我想尝试一种不同的方法来解决同一个问题。