Удалить дубликаты в списке из интервью Cracking the Coding

1

От Cracking Coding Interview. Проблема 2.1: Введите код для удаления дубликатов из несортированного связанного списка. Это решение, которое они обеспечивают:

public static void removeDuplicates(Node n) {
    Hashtable<Integer, Boolean> table = new Hashtable<Integer, Boolean>();
    Node previous = n;
    while (n != null) {
    if (table.containsKey(n.data)) {
        previous.next = n.next;
    } else {
        table.put(n.data, true);
        previous = n;
    }
    n = n.next;
    }
}

Мой вопрос: когда вы делаете n = n.next, не потеряете ли вы голову списка (первый узел)? Как бы вы снова получили доступ к этому списку с удалением дубликатов, если у вас нет доступа к голове?

А также разве лучше использовать набор вместо таблицы? Я не думаю, что вам нужен ключ и ценность. Думаю, вам нужен только ключ, верно?

спасибо

  • 1
    n является локальным для функции. Изменения в нем не влияют на исходную переменную в вызывающей функции.
  • 1
    это похоже на ужасное решение, ты уверен, что они не хотели обмануть тебя ?!
Теги:
linked-list

1 ответ

1

Во-первых, как уже упоминалось в комментарии, изменение локального параметра не влияет на входную переменную вызывающих.
Во-вторых, вы правы, использование Set будет лучше, но только потому, что код лучше читать. Код синтаксически корректен, внутренне набор - это не что иное, как карта с тем же самым dummyobject, что и значение для каждого ключа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню