Почему требуется двойной указатель с рекурсией, если я хочу добавить узел в связанный список. Он должен работать с одним указателем.Требуется двойной указатель в рекурсии
Следующий код не работает для меня
class LinkedList
{
private:
struct Node
{
int data;
Node* link;
}*Ptr;
public:
LinkedList()
{
Ptr = NULL;
}
void Add(int num)
{
/*Add(&Ptr, num);*/
Add(Ptr, num);
}
void Add(Node* Ptr, int num)
{
Node* tmp = NULL;
if (Ptr == NULL)
{
tmp = new Node;
tmp->data = num;
tmp->link = NULL;
Ptr = tmp;
}
else
{
Add(Ptr->link, num);
}
}
void Display()
{
Node *tmp;
tmp = Ptr;
while (tmp != NULL)
{
cout <<tmp->data << endl;
tmp = tmp->link;
}
}
}
int main() {
LinkedList l;
l.Add(10);
l.Add(20);
l.Add(30);
l.Add(40);
l.Add(50);
l.Display();
_getch();
return 0;
}
'PTR = TMP;' не означает * ничего * вызывающему в 'Add() '(и на самом деле происходит утечка памяти). Вы используете параметр 'Ptr' с тем же именем, что и член (' Ptr'), который не помогает (и обычно не рекомендуется). Вам необходимо либо передать указатели, которые будут изменены, либо по ссылке, либо по ссылке. Это C++, вы можете угадать предпочтение (разрешено ли вам использовать их или нет). – WhozCraig