Я пишу шаблон класса связанного списка на C ++ для себя, чтобы помочь мне вернуться к программированию на C ++.У меня есть следующее определение класса:
template <typename T>
class List
{
public:
List();
~List();
void append(T data);
void display();
int count();
private:
struct Node
{
T data;
Node *next;
} *head;
};
У меня есть две версии метода добавления - одна работает, а другая нет.Я не могу понять, в чем разница с точки зрения выполняемых операций и почему вторая не работает.Вот тот, который работает:
template <typename T>
void List<T>::append(T data)
{
if (head == NULL)
{
head = new Node;
head->data = data;
head->next = NULL;
}
else
{
Node *p = head, *q;
while (p != NULL)
{
q = p;
p = p->next;
}
p = new Node;
p->data = data;
p->next = NULL;
q->next = p;
}
}
А вот тот, который, кажется, фактически не добавляет никаких элементов в список:
template <typename T>
void List<T>::append(T data)
{
Node *p = head, *q = head;
while (p != NULL)
{
q = p;
p = p->next;
}
p = new Node;
p->data = data;
p->next = NULL;
if (q != NULL)
{
q->next = p;
}
}
Любые идеи относительно того, почему вторая версияне добавляет никаких элементов?Я пробовал это с типом T как int.
PS Ни одна из версий не дает никаких ошибок или предупреждений ни во время компиляции, ни во время выполнения.