Удаляя дубликаты с помощью Hash Set для связанного списка, я не могу понять рабочий процесс кода - PullRequest
1 голос
/ 17 октября 2019

Проблема заключается в удалении дубликатов из несортированного связанного списка. Использование хеш-набора отслеживает значения, уже находящиеся в наборе.

Я не понимаю, что делает блок if, else. Особенно код, предыдущий = текущий.

Это перезаписывает предыдущий предыдущий?

Я нарисовал несколько диаграмм на доске и не могу понять поток этого кода

public void removeDuplicateFromUnsortedList() {
    HashSet<Integer> hs = new HashSet<Integer>();

    Node current = head;
    Node prev = null;

    while(current != null) {

        int current_data = current.data;

        if(hs.contains(current_data)) {
            prev.next = current.next;
        }
        else {
            hs.add(current_data);
            prev = current;
        }

        current = current.next;

    }
}

Этожелаемый результат, который работает.

Распечатка: 1 -> 1 -> 4 -> 2 -> 4 -> 2 -> 2 -> ноль

Распечатка: 1 -> 4 -> 2 -> ноль

...