Возможно ли в односвязном списке сделать ввод/удаление элементов в конец/из конца списка?
Я знаю (но пока не понял реализацию), что с помощью двух указателей (то есть реализовать уже двусвязный список) сделать ввод/удаление элементов в конец/из конца списка возможно.
Но как это сделать в односвязном списке БЕЗ перебора элементов в поисках конца списка(условие задачи)? Если все же сделать без двух указателей это невозможно, то сильно ли изменится оставшийся код программы? Удалось сделать эти действия только в начало списка:
struct person
{
char secondname[30];
int math, rus, eng;
};
typedef struct person DataType;
struct node
{
DataType data;
struct node* head;
//struct node* tail;
struct node* next;
}
.....
list new_node(list begin, DataType person)
{
list temp = (list)malloc(sizeof(struct node));
temp->data = person;
temp->next = begin;
return temp;
}
.....
list delete_node(list begin)
{
system("CLS");
struct node* temp;
if (begin)
{
temp = begin;
begin = begin->next;
free(temp);
puts("Удалено");
system("pause");
}
return begin;
}
Источник: Stack Overflow на русском