Связный список. Фиктивный узел

В этом уроке ты
  • Научишься применять паттерн «фиктивный узел», чтобы избежать лишнего кода.
Паттерн “фиктивный узел”

Фиктивный узел — это паттерн, позволяющий решить всего одну проблему: избавиться от дублирования кода/лишнего кода. Примеры применения:

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

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

// class ListNode {
//     public int Val { get; set; }  
//     public ListNode Next { get; set; }   
//     public ListNode(int x) { Val = x; }
//     public ListNode(int x, ListNode nxt) { Val = x; Next = nxt; }
// }

class Solution {
    public ListNode SomeFunc(ListNode head) {
        ListNode dummy = new ListNode(0, head);  // Создаем фиктивный узел, который указывает на head
        
        // работаем с dummy как с новой головой списка
        // ...
        
        // в конце убираем dummy вершину, возвращая dummy.Next как новый head
        return dummy.Next;
    }
}
Что дальше

Попробуй решить задачки на тему фейковой вершины самостоятельно, чтобы закрепить всё на практике.