Din7
@Din7
Пытаюсь программировать, CGmaster - ломастер

Как происходит смена головы списка при вставке?

Глупый вопрос от новичка:
Есть кусок код на С++, который описывает вставкунового элемента в голову списка :
void LinkedList::headInsert(int val)
{
    /* The list is empty? */
    if (_pHead == NULL) {
        /* the same to create a new list with a given value */
        _pTail = _pHead = new Node(val);
    }
    else
    {
        /* Create a new node and insert it before the head node */
        Node *node = new Node(val);
        node->_pNext = _pHead;
     
 /* Update the head node */
        _pHead = node;
    }
}


Неясно что происходит в конце
/* Update the head node */
        _pHead = node;

до этой строчки node указывает на голову, и головой списка считается изначальная голова списка. А потом как? Мы обращаемся к исходной голове списка и присваиваем ей node. Выходит, что за node следует node (два одинаковых элемента). Что я неправильно понимаю?
  • Вопрос задан
  • 204 просмотра
Решения вопроса 2
Ipavelle
@Ipavelle
Веб-разработчик.
Попробую как-нибудь рассказать :) Первый момент - надеюсь понятно, что если нет головы, то она создается, а если есть - то добавляется элемент. В коде указан некий класс Node. При создании объекта от этого класса принимаем значение val как значение этого объекта. Также в данном объекте есть ссылка на следующий объект, что необходимо для реализации списка.
Допустим есть 1 элемент в списке. Каждый элемент - это объект класса Node. В нем есть некое значение, и ссылка на слд. объект. Но так как объекта нету, то ссылка указывает на NULL.
Вставляем новый элемент. Для этого создаем новый объект класса Node с необходимым значением. Ссылку, которая введет на слд. объект мы указываем на голову данного списка. Теперь у нас есть 2 разных объекта (при *node = new Node(val) создаются разные объекты класса). И для финиша указываем что голова это наш новый элемент/объект
Ответ написан
And3en
@And3en
Software Engineer at Luxoft
Тут Вам следует понимать что вы оперируете с объектами. То есть в конце ссылка на новую голову перемещается на новый, только что созданный, элемент.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abcd0x00
до этой строчки node указывает на голову

Он указывает не на голову, а на только что выделенный через new фрагмент памяти.
А вот уже внутри этого фрагмента памяти есть указатель, который указывает на голову.
Дальше они (новый узел и голова) становятся связанными и мы можем сделать новый узел головой.
Доступ к прежней голове осуществляется через новую голову.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы