删除循环链表中给定键的所有匹配项

时间:2017-11-08 21:39:50

标签: java data-structures linked-list

我试图删除循环链表中所有出现的给定键,例如:

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;
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

您的问题是,当您从列表中删除节点时,您没有处理情况。例如,当您删除不是currentLink的{​​{1}}时,您没有将head分配给下一个节点(在移至下一个节点之前)。 您也没有处理只有一个头的情况。 通过关于如何移动到下一个节点的特定逻辑,分别处理每个案例要容易得多。这是工作代码:

currentLink