所以,我有一个使用链表删除重复元素的方法,该方法确实可以从前端(返回过程)和末端(返回过程)中除去重复元素,但不能从中间(重复失败,如果工作应返回通行证) 输出示例如下:
一些重复项(一端):( D,E,C,D,C,C,B,A)-A->(D,E,C,D,C,C,B) 所有“ A”删除:通过 没有其他人删除:通过
一些重复项(中间):( D,E,C,D,C,C,B,A)-C->(D,E,D,C,B,A) 所有“ C”删除:FAIL * 没有其他人删除:失败*
某些重复项(另一端):( D,E,C,D,C,C,B,A)-D->(E,C,C,C,B,A) 所有“ D”删除:通过 没有其他人删除:通过
这是我使用的方法:
public void expunge(T anElement){
Node prev = null;
Node currNode = firstNode;
// boolean findDublicate = false;
while(currNode != null){
if(currNode.data.equals(anElement)){
//Found something to remove
numberOfEntries--;
if(prev == null){
firstNode = currNode.next;
} else {
prev.next = currNode.next;
}
if(prev == anElement){
currNode.next = prev.next;}
}
//Maintain loop invariant: prev is the node before curr.
if(currNode.next != firstNode){
prev = currNode;
}
currNode = currNode.next;
}
}