Связанные списки
Добрый день. Хочу уточнить. Есть код вида(простой набросок):
struct list{
int data;
list*pNext;
};
list *pHead=NULL;
void addHead(int b)
{
list *ch=new list;
ch->data=b;
ch->pNext = pHead;
pHead = ch;
}
void display (){
list * current=pHead;
while(current)
{
cout<<current->data;
current=current->pNext;
}
}
int main()
{
addHead(3);
display();
return 0;
}
Не могу понять логику в строке list * current=pHead;
Почему *current указывает на 1-й элемент, а не на NULL, ведь в блоке void addHead(int b)
pHead присваевается NULL.
Вроде, все написал как надо, но выводит бесконечно только последний введенный элемент. Помогите, пожалуйста, разобраться.
Обновление
pHead=ch; pHead
указывает на созданную структуру, куда записалась в поле data 3, я правильно понял?
В функции display() current указывает на структуру, а если вызовов будет несколько, то *current укажет на последнею структуру или нет?
С присваиванием NULL я ошибся, вы правы.
Обновление 2
Этот код стряпал я. ) Действительно, включив ее в цикл, все заработало, спасибо за внимательность. ) Тогда остался последний вопрос, как в функции dissplay()
происходит вывод на печать, т.е. *current
указывает на pHead;
, который объявлен глобально и равен налу? Значит, *current = NULL
, соответственно, далее идет проверка while(current){...}
(не равен ли currenr 0), но он ведь равен. Я запутался здесь. Код писал с примера.