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

时间:2014-11-27 19:23:53

标签: java linked-list

我尝试仅使用list.firstlist.next从链接列表中删除第一个项目。 (这不是使用Java LinkedList<E>。)

我编写了以下代码,但它删除了所有匹配项而不是第一个:

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;
}

如果n等于3list等于[1,3,4,5,3,2],我得到的结果是[1,4,5,2],但我希望它为[1,4,5,3,2]

有人可以帮我理解我做错了吗?

1 个答案:

答案 0 :(得分:2)

您可以更轻松地修改原始列表,而不是创建新列表。您可以简单地保持指向列表头部的指针,并使用当前和前一个指针遍历列表。当您找到包含n的第一个单元格时,重新绑定前一个单元格的.next以跳过当前单元格。这样,你可以立即返回列表的头部,而不必继续递归。