从单链表中删除重复项

时间:2017-04-01 14:30:33

标签: java algorithm

有没有办法以这种方式修改链表,以便从中删除所有重复项。

需要考虑线性时间和恒定内存使用情况。我试图将列表的所有元素放入HashMap,这给了我们恒定的时间,但线性内存使用。

还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用stream().distinct()方法进行线性时间:

List<String> result = list.stream()
        .distinct()
        .collect(Collectors.toList());

答案 1 :(得分:0)

在算法上听起来不可能(或者有人会让我感到惊讶)。

但你可以创建一个没有重复的列表的模拟,而不用那样做任何算法:

public class SimulatedNoDuplicatesList extends LinkedList {
    private List originalList;
    SimulatedNoDuplicatesList(List original) {
        originalList = original;
    }
// override all the methods that you want to use with the old list. for example
//   @Override
    public Object get(int i) {
        if (!super.contains(i) && originalList.contains(i)) {
            super.add(originalList.get(i));
        }
        return super.get(i);
    }
}
相关问题