Удаление n-го элемента из списка(С++)
Дана следующая задача:
Написать программу для удаления узла из любой позиции двусвязного списка, его создания и вывода на экран. Программа должна запрашивать количество узлов при создании, их значения и позицию удаляемого элемента. Список создается путем добавления элемента в начало списка. Функция вывода реализует отображение списка начиная с конечного элемента. Нумерация позиций начинается с 1, 1-ый элемент – начальный элемент списка.
Написал, следующий код, но программа зависает, когда очередь доходит до функции define_an_element. Не могу разобраться, что нужно исправить, чтобы программа работала корректно.
#include <iostream>
struct LIST
{
int data;
LIST* next;
LIST* prev;
};
void create_an_list(LIST** head, LIST** tail);
void print_the_list(LIST* tail);
LIST* define_an_element(LIST* head);
void delete_an_element(LIST** ptr);
int main()
{
LIST* head = NULL; LIST* tail = NULL;
int n;
std::cin >> n;
std::cout << std::endl;
for (int i = 1; i <= n; i++)
create_an_list(&head, &tail);
std::cout << std::endl;
LIST *ptr = define_an_element(head);
std::cout << ptr->data;
delete_an_element(&ptr);
print_the_list(tail);
return 0;
}
void create_an_list(LIST** head, LIST** tail)
{
LIST* temp;
temp = new LIST;
std::cin >> temp->data;
temp->next = NULL;
temp->prev = NULL;
if (*head == NULL)
{
*head = temp;
*tail = temp;
}
else
{
temp->next = *head;
(*head)->prev = temp;
*head = temp;
}
}
LIST* define_an_element(LIST* head)
{
int pos, cnt = 0;
std::cin >> pos;
std::cout << std::endl;
LIST* temp;
temp = head;
if (temp != NULL)
{
while (temp != NULL)
{
cnt++;
if (cnt == pos + 1)
return temp;
temp = temp->next;
}
}
return NULL;
}
void delete_an_element(LIST** ptr)
{
LIST* temp = (*ptr)->prev;
if (temp != NULL)
{
(*ptr)->prev = temp->prev;
if (temp->prev)
(*ptr)->prev->next = *ptr;
}
}
void print_the_list(LIST* tail)
{
LIST* temp;
temp = tail;
while (temp != NULL)
{
std::cout << temp->data << " ";
temp = temp->prev;
}
}
В коде была описка. Убрал ; после начала цикла. Но возникла новая проблема. При вводе 123 и выборе 3 элемента выдает пустую строку.
Источник: Stack Overflow на русском