删除链表中项目的第一个匹配项



我正在尝试仅使用 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]

有人可以帮助我了解我做错了什么吗?

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

相关内容

  • 没有找到相关文章

最新更新