В односвязном списке, рекурсивная функция не печатает голову списка, а корень печатает два раза

Задача заключается в следующем. Необходимо вывести односвязный список в прямом и обратном порядке. Рекурсивная функция выводит два раза корень и не выводит голову списка. Помогите найти причину.Вот код:

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
    }
}

и все получится.

→ Ссылка