该方法应该检查链表中是否有多个相同的条目。我试着用这种方法来检查头部是否等于当前节点,然后让电流等于current.next
,如果头部从不等于电流,我让头部等于head.next
,并通过将其分配给firstNode
来重新启动电流。当我尝试测试代码时,它给了我以下错误:
java.lang.NullPointerException在LinkedBag1.hasDuplicateEntries(LinkedBag1.java:182)Java:182是while((!head.equals(current)) || (current != null)){
不确定这是什么意思,是什么导致我的方法使这个错误出现。
public boolean hasDuplicateEntries(){
Node head = firstNode;
Node current = head.next;
boolean duplicate = true;
while((!head.equals(current)) || (current != null)){
if(head.equals(current)) {
duplicate = true;
}
else{
current = current.next;
}
current = firstNode;
head = head.next;
}
return duplicate;
}
我的方法有什么地方做错了吗?
我认为你的问题是head = head.next;
什么是head.next
在你的列表中的最后一个节点?当您将head
设置为该值然后循环并再次检查head.equals(current)
时会发生什么?
(也,也许你已经意识到这一点,但我认为你的算法只会工作,如果重复的条目是彼此相邻。)
不确定异常,但该方法将始终返回true,因为您在初始化时将"duplicate"设置为true,并且仅在稍后将其设置为true(需要"boolean duplicate = false;")
public boolean hasDuplicateEntries() {
int currentIndex = 0;
for (Node current = head; current != null; current = current.next) {
//with each node in list, compare it to all element of list
int nodeIndex = 0;
for (Node node = head; node != null; node = node. next) {
if (currentIndex != nodeIndex && node.equals(current)) {
return true;
}
nodeIndex++;
}
currentIndex++;
}
return false;
}
是否要删除重复元素?因此,您可以使用一些不能包含重复项的日期结构,如Set.