LeetCode 83. Удалить дубликаты из отсортированного списка
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode *cur = head; while (cur && cur->next) { if (cur->val == cur->next->val) cur->next = cur->next->next; else cur = cur->next; } return head; } };
Сначала создается указатель cur
, указывающий на заголовок, который является указателем на заданный связанный список, затем мы собираемся манипулировать указателем cur
.
В цикле while
, хотя cur
не является null
, это на самом деле помогает в ситуации, когда головы равны nullptr
, так что программа прервет цикл while
и вернет head
в качестве решения. Пока действует cur->next
, будем делать кое-что интересное под капотом.
Итак, если текущее значение, обозначенное как cur->val
, равно следующему значению, обозначенному как cur->next->val
, то удалите следующий узел. В этом случае мы перемещаем указатель next
следующего узла и заставляем его указывать на указатель next
следующего узла. В противном случае текущий указатель будет перемещен к следующему значению next pointer
. После этого цикла while
мы проверяем все узлы связанного списка и убеждаемся, что не существует повторяющихся значений. Чисто и эффективно. Сделанный.