Вопрос:

Учитывая head связанного списка и целое число val, удалите все узлы связанного списка, имеющие Node.val == val, и верните новый заголовок.

Пример 1:

Input: head = [1,2,6,3,4,5,6], val = 6
Output: [1,2,3,4,5]

Решение:

В данной задаче мы должны удалить все узлы из связанного списка, и значение val этих узлов будет передано нам в качестве входных данных.

Во-первых, мы проверим, является ли связанный список пустым или нет. Если да, верните null.

if(head == NULL) 
    return head;

Затем мы запустим цикл while, пока head не станет нулевым, а head не достигнет значения, val, который мы хотим удалить. Если это условие выполнено, указатель head будет увеличен.

while(head != NULL && head -> val == val)
{
    head = head -> next;
}

Теперь мы создадим два указателя: curr и prev. Указатель curr будет использоваться для хранения значения head, а указатель prev будет хранить значение null.

ListNode* curr = head;
ListNode* prev = NULL;

Следующим шагом будет запуск цикла до тех пор, пока указатель curr не станет нулевым.

Здесь мы проверим, равно ли значение указателя curr значению val, которое мы хотим удалить. Если да, то мы сделаем следующий указатель указателя prev на следующий указатель curr. И указатель curr будет увеличен.

while(curr != NULL)
{
    if(curr -> val == val)
    {
         prev -> next = curr -> next;
         curr = curr -> next;
     }

В противном случае мы сделаем указатель prev равным указателю curr и увеличим указатель curr.

else
{
    prev = curr;
    curr = curr -> next;        
}

Теперь последний шаг — вернуть голову.

Ниже приведен полный код для данной проблемы:

Спасибо за прочтение!

S.