Сразу извиняюсь, что привожу пример не относительно твоей программы. Вот как выглядит добавление элемента в конец двунаправленного списка, код скопировал из когда-то написанной мной подобной работы:
| Код | void FunFirst (ELEM *&start, ELEM *&end, ELEM *&rsp) { // start - Указатель на начало линейного списка. // end - Указатель на конец линейного спсика. // rsp - Указатель для перемещения по списку.
int ret; double var; // Переменная, которая считывает значение, которое затем будет передано dat. ELEM *nel; // Указатель на новый элемент. FunFourth (start);
printf (" Введите значение, которые вы хотите хранить в новом элементе: "); ret = scanf ("%lf", &var); if (ret != 1) { // Проверка типа введенных пользователем данных. printf (" Ошибка №3: Не верный тип введенных вами данных.\n"); return; }
nel = new ELEM; // new ELEM [.] - в квадратных скобках записывается колличество элементов. if (nel == NULL) { printf (" Ошибка №2: Программа не смогла выполнить процедуру создания нового элемента.\n"); } nel -> dat = var; // Заносим данные. nel -> next = NULL; // Сообщаем, что новый элемент является последним.
if (start == NULL) { start = nel; // Указатель начала на новый элемент. end = nel; // Указатель конца на новый элемент. rsp = nel; // Указатель перемещения на новый элемент. nel -> prev = NULL; } else { nel -> prev = rsp; rsp -> next = nel; rsp = nel; end = rsp; end -> next = NULL; }
printf (" Элемент cо значением '%lf' успешно добавлен.\n", var); FunFourth (start); }
|
Аналогично и в середину списка. И когда работаешь со списками, то рекомендую смотреть процесс работы программы через "Watch", сразу увидишь, где и что неправильно связалось. |