我试图删除循环链表中所有出现的给定键,例如:
1 - > 0 - > 1 - > 0
键号= 1删除所有第1次出现并以:
结束0 - > 0
但我的代码是:
0 - > 1 - > 0 - > 1
它将头移到列表末尾而不是删除它。
我发现的另一个问题是,如果有两个或更多的数字具有相同的值,那么它总会留下一个例如:
0 - > 1 - > 1 - > 0
我得到了这个结果
0 - > 1 - > 0
CODE
public void remove(int num) {
if (isEmpty()) {
System.out.println("Empty List");
} else {
Node currentLink = head;
Node previousLink = head;
boolean run = true;
while (run) {
if (currentLink.data == num) {
currentLink.size--;
if (currentLink == head) { //Delete head
head = head.next; // Deletes head but then it appears on the end of the list
} else
previousLink.next = currentLink.next; // Deletes all occurrences of a given key but always leaves one if they are next to each other
}
previousLink = currentLink;
currentLink = currentLink.next;
if (currentLink == head) run = false;
}
}
}
答案 0 :(得分:1)
您的问题是,当您从列表中删除节点时,您没有处理情况。例如,当您删除不是currentLink
的{{1}}时,您没有将head
分配给下一个节点(在移至下一个节点之前)。
您也没有处理只有一个头的情况。
通过关于如何移动到下一个节点的特定逻辑,分别处理每个案例要容易得多。这是工作代码:
currentLink