Сорри, что не сразу ответил, были проблемы с интернетом...
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); // [ ]
}