所以我有一份清单:
8,9,1,2,3,5,3,1,8,1,4,5,2,7,9,9,5,6并希望将其重现为唯一的(只包含相同数字中的一个),因此此数字将是
8,9,1,2,3,5,4,7,6唯一发生的问题是remove()方法删除了节点值的第一个实例,并且假设保留第一个出现的数字,并且应该从列表中删除后面的实例。没有集合、hashmap或任何东西。
while(current.getPrevious() != null) {
while(next.getPrevious() != null) {
if(next.equals(current)){
next = next.getNext();
continue;
}
else if(next.getValue().compareTo(current.getValue()) == 0){
remove(next.getValue()); // The remove method deletes the first instance of number in the linked list
next = next.getNext();
}
next = next.getPrevious();
}
current = current.getNext();
next = current.getNext();
}发布于 2014-04-03 04:35:41
将其全部放入一个LinkedHashSet中,它将保留顺序,并且只保留第一个副本。
Set<Integer> noDups = new LinkedHashSet<Integer>(myList);如果您将列表与System.out.println(noDups);一起使用,结果如下:
[8, 9, 1, 2, 3, 5, 4, 7, 6]发布于 2014-04-03 04:36:40
如果您不想创建自己的应用程序,请尝试使用Set。它是一个泛型集合,只包含唯一的元素,并将处理新元素的添加。如果这些新元素已经存在于集合中,则不会添加它们。
编辑:如果您正在实现自己版本的唯一链表,请尝试创建一个add函数来检查新数据是否已包含在列表中。如果不是,则添加新数据。如果您将验证包含在这样的方法中,那么向其中添加新元素可能会更容易。您甚至可以扩展这个想法,创建一个接受列表或数组的函数,并在元素上调用addItem方法作为列表参数。
发布于 2014-04-03 05:18:38
您可能希望在输入时以重复项为目标,而不是在删除时。
由于我不确定您要插入的代码,因此我将介绍一般流程:
对于所有插入,
false).true.https://stackoverflow.com/questions/22822396
复制相似问题