Как удалить первый элемент односвязного списка?

Допустим есть список структур. Чтобы удалить не крайний элемент нужно просто в предыдущей структуре адрес на следующий элемент перекинуть на адрес следующего элемента и очистить выброшенный элемент(надеюсь я понятно изъяснился). Но как сделать 2ой элемент первым? Если просто удалить из памяти первый элемент то к списку уже нельзя будет обратиться?


Ответы (1 шт):

Автор решения: Frog

Односвязный список состоит из узлов(Node), в каждом узле есть ссылка на следующий узел. Последний узел указывает на null.

Примерно выглядит вот так:

HEAD
 ↓
Node1 -> Node2 -> Node3 ->...-> NodeN -> null

Т.к. Второй элемент 'не знает' о существовании первого, то удалить первый элемент очень просто.

deleteFirst(List l) {
    // first - первый узел списка aka HEAD
    // поле next - указатель на следующий узел
    l.first = l.first.next;
}

И после удаления список будет выглядеть вот так

         HEAD
          ↓
Node1 -> Node2 -> Node3 ->...-> NodeN -> null

А первый элемент, ссылки на который у нас уже нет, из памяти удалит GC.

→ Ссылка