我尝试仅使用list.first
和list.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
等于3
且list
等于[1,3,4,5,3,2]
,我得到的结果是[1,4,5,2]
,但我希望它为[1,4,5,3,2]
。
有人可以帮我理解我做错了吗?
答案 0 :(得分:2)
您可以更轻松地修改原始列表,而不是创建新列表。您可以简单地保持指向列表头部的指针,并使用当前和前一个指针遍历列表。当您找到包含n的第一个单元格时,重新绑定前一个单元格的.next以跳过当前单元格。这样,你可以立即返回列表的头部,而不必继续递归。