兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素

时间:2023-03-09 03:45:40
兰亭集势笔试题:用最优方法从LinkedList列表中删除重复元素

用运行速度最优的方法从LinkedList列表里删除重复的元素,例如A->B->BB->B->C,返回A->B->BB->C。

考试的时候没完全想明白,考完又想了想,其实还是蛮简单的。思路很简单:利用一个Set存放LinkedList中的元素,在迭代的过程中,判断当前元素是否在Set中出现过,如果出现过就删除,也就是说我们在遍历的过程中进行删除操作,所以这里要用到ListIterator,而不能用普通的Iterator。

代码如下:

private static LinkedList removeDuplicatedElements(LinkedList list) {
HashSet set = new HashSet();
Iterator iter = list.listIterator();
while(iter.hasNext()){
String str = (String)iter.next();
if(!set.contains(str))
set.add(str);
else
iter.remove();
}
return list;
}