В односвязном списке, рекурсивная функция не печатает голову списка, а корень печатает два раза
Задача заключается в следующем. Необходимо вывести односвязный список в прямом и обратном порядке. Рекурсивная функция выводит два раза корень и не выводит голову списка. Помогите найти причину.Вот код:
Node* head;
void initList(MyList& l)//создаём корень списка
{
head = new Node;
head = nullptr;
}
void addToHead(int a, MyList& l) //вставляем значения в начало списка
{
Node* pHead = new Node; //создали новый элемент и выделяем под него память
pHead->data = a; // присвоили начальные данные
pHead->pNext = head; // присваиваем адрес предыдущего указателя
head = pHead; // присваиваем адрес нового указателя
}
void printList(const MyList& l)// распечатываем список
{
Node* p;
p = head;
do {
printf("%d ", p->data); // вывод значения элемента p
p = p->pNext; // переход к следующему узлу
} while (p != nullptr);
std::cout << "\n";
p = head;
printList_rec(l, p);
std::cout << "\n";
}
int printList_rec(const MyList& l, Node* p)
{
if (p->pNext != nullptr)
{
/* if (p->pNext == nullptr)
{
return 0;
}*/
p = p->pNext;
printList_rec(l, p);
}
printf("%d ", p->data); // вывод значения элемента p
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Напишите вашу функцию вывода проще (выбросил неиспользуемый MyList& l, тем более что у вас явный чистый C, ну и исправил, конечно):
void printList_rec(Node* p)
{
if (p)
{
printList_rec(p->pNext);
printf("%d ", p->data); // вывод значения элемента p
}
}
и все получится.