Удаление повторяющихся элементов из отсортированного односвязного списка

Сравнивайте соседние узлы. Если значения равны, исключайте следующий узел из цепочки; иначе переходите дальше. Благодаря сортировке все повторы расположены подряд.

Короткий ответ

Что ответить на собеседовании

Сравнивайте соседние узлы. Если значения равны, исключайте следующий узел из цепочки; иначе переходите дальше. Благодаря сортировке все повторы расположены подряд.

Подробный разбор

Ответ с пояснениями

Условие

Дан отсортированный односвязный список. Требуется избавиться от всех повторяющихся узлов так, чтобы каждый значение встречалось лишь один раз. Необходимо вернуть получившийся список, сохранив исходный порядок элементов.

Input: head = [1,1,2] Output: [1,2]

Input: head = [1,1,2,3,3] Output: [1,2,3]

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode head) {

    }
}

Ответ

Сравнивайте соседние узлы. Если значения равны, исключайте следующий узел из цепочки; иначе переходите дальше. Благодаря сортировке все повторы расположены подряд.

public ListNode deleteDuplicates(ListNode head) {
    ListNode current = head;
    while (current != null && current.next != null) {
        if (current.val == current.next.val)
            current.next = current.next.next;
        else
            current = current.next;
    }
    return head;
}

Время O(n), дополнительная память O(1). Исходный список изменяется, новые узлы не создаются. При удалении current не сдвигается, чтобы проверить длинную цепочку одинаковых значений. Пустой список и список из одного узла возвращаются без изменений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее