Сорри, что не сразу ответил, были проблемы с интернетом...
LP, Ты прикалываешся или как? Даеш пример с шаблоном, человеку, который только что начал изучать С++
Извиняюсь, шаблоны из прошлого поста убрал. Получился минимальный список на С++, от которого ИМХО надо отталкиваться.
Вот на эту программу у меня больше часа ушло
Только это скорее Си, чем С++. Далее нужно выделить создание узла в отдельную функцию и добавить пару функций. Примерно так.
struct List
{
int data;
List*next;
};
List* create_node(int dat = 0, List* nxt = NULL)
{
List* node = (List*)malloc(sizeof(List));
node->data = dat;
node->next = nxt;
return node;
}
void destroy_node(List* node)
{
free(node);
}
//вставка в позицию после node
List* insert_after(List* node, int dat)
{
List* newnode = create_node(dat, node->next);
node->next = newnode;
return newnode;
}
//вставка в начало списка
List* insert_front(List* first_node, int dat)
{
return create_node(dat, first_node);
}
void remove_node(List* first_node, List* node)
{
if(first_node == NULL) return;
while(first_node->next != NULL && first_node->next != node)
first_node = first_node->next;
if(first_node->next != NULL)
{
first_node->next = node->next;
destroy_node(node);
}
}
List* remove_all(List* first_node)
{
while(first_node != NULL)
{
List* t = first_node;
first_node = first_node->next;
destroy_node(t);
}
return NULL;
}
List* find_node(List* node, int value)
{
while(node) {
if(node->data == value) return node;
node = node->next;
}
return NULL;
}
void print_list(List* list)
{
printf("[ ");
while(list != NULL)
{
printf("%d ", list->data);
list = list->next;
}
printf("]\n");
}
Тестовая программа:
#include <stdio.h>
#include <malloc.h>
//...
int main()
{
List* list = NULL;
print_list(list); // выводит: [ ]
list = create_node(1);
print_list(list); // [ 1 ]
list = insert_front(list, 10);
list = insert_front(list, 8);
print_list(list); // [ 8 10 1 ]
List* node = find_node(list, 10);
//... [ проверка на NULL пропущена ]
insert_after(node, 21);
print_list(list); // [ 8 10 21 1 ]
remove_node(list, node);
print_list(list); // [ 8 21 1 ]
list = remove_all(list);
print_list(list); // [ ]
}