首页 > 解决方案 > 以有效的方式从排序的链表中删除重复项

问题描述

我在 HackerRank 上,我需要从排序的链接列表中删除重复的项目。我通过了所有案例,除了其中两个输入类似于:10001102034 所以我的程序需要几秒钟才能完成并超过时间。如何更有效地编写代码,我听说过使用平方根,但我不知道如何使用它。任何指南都值得赞赏。这是我的代码。

private static Node removeDuplicates(Node head) {
        /* Another reference to head */
        Node current = head;
        Node next;

        /* Traverse list till the last node */
        while (current != null && current.next != null) {
            if (current.data == current.next.data) {
                next = current.next.next;
                if (next == null) {
                    current.next = null;
                    break;
                }
                current.next = next;
            } else {
                current = current.next;
            }
        }
        return head;
    }

再次。它有效,但数字较长时需要太多时间。

标签: javaalgorithmsortinglinked-listnodes

解决方案


您应该if (current.data == current.next.data)while循环替换条件并使用break 'label'

out:
while (current != null && current.next != null) {
    while (current.data == current.next.data) {
        next = current.next.next;
        if (next == null) {
            current.next = null;
            break out;
        }
        current.next = next;
    } 
    current = current.next;
}

推荐阅读