Я не могу заставить эту программу присоединить узел к концу связанного списка. Я знаю, что он должен что-то сделать с помощью функции "addBack", потому что функция "addFront" работает отлично. Я думаю, этого должно быть достаточно, но если требуется больше кода, просто спросите, и вы получите.
template <typename E>
void SLinkedList<E>::addBack(const E& e)
{
E *temp = head;
while (temp -> next != NULL)
temp = temp -> next;
SNode<E> * v = new SNode<E>;
temp -> next = v;
v -> elem = e;
v -> next = NULL;
}
У вас были две проблемы с этим кодом. Сначала голова не является указателем типа E, а является указателем типа SNode. 2-й список может быть пустым при добавлении первого элемента (голова будет NULL). Поэтому вам нужно обрабатывать этот случай отдельно. Следующий код должен работать:
template <typename E>
void SLinkedList<E>::addBack(const E& e)
{
SNode<E> * v = new SNode<E>;
v -> elem = e;
v -> next = NULL;
if(head == NULL) //list is empty
head = v;
else
{
SNode<E> *temp = head;
while (temp -> next != NULL)
temp = temp -> next;
temp -> next = v;
}
}
Однако для более быстрых вставок вы должны иметь два указателя, как для головы, так и для хвоста списка. Вам не нужно будет перебирать весь список, чтобы найти хвост. Однако тогда вам придется обслуживать как голову, так и хвост при добавлении и удалении узла из списка. Это будет функция, если у вас есть оба указателя:
template <typename E>
void SLinkedList<E>::addBack(const E& e)
{
SNode<E> * v = new SNode<E>;
v -> elem = e;
v -> next = NULL;
if(head == NULL) //list is empty
head = tail = v;
else
tail -> next = v;
}
return(ptd);
из "tidtable.c"
E *temp = head
наSNode<E> *temp = head
, потому чтоtemp
- это указатель узла, с которым вы идете до конца. Компилятор должен был предупредить вас об этом. Там не было никаких сообщений?E
- это тип элемента, а не тип узла управления. Как вы ожидаетеE *temp = head;
даже компилировать, гораздо меньше работы (предполагается , чтоhead
являетсяSNode<T>*
И даже если фиксировано, это еще не будет работать, так как он не будет обновлять указатель головы на начальной вставки (первая вставка).