Как удалить первый элемент односвязного списка?
Допустим есть список структур. Чтобы удалить не крайний элемент нужно просто в предыдущей структуре адрес на следующий элемент перекинуть на адрес следующего элемента и очистить выброшенный элемент(надеюсь я понятно изъяснился). Но как сделать 2ой элемент первым? Если просто удалить из памяти первый элемент то к списку уже нельзя будет обратиться?
Ответы (1 шт):
Односвязный список состоит из узлов(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.