Это вопрос новичка, но я не уверен, как передать по ссылке в C ++.У меня есть следующий класс, который устанавливает Node и несколько функций.
class Node
{
public:
Node *next;
int data;
Node(int dat)
{
next = NULL;
data = dat;
}
Node* getNext()
{ return next; }
void setNext(Node *n)
{ next = n;}
void reverse(Node *root)
{
Node *previous = NULL;
while(root != NULL)
{
Node *next = root->getNext();
root->setNext(previous);
previous = root;
root = next;
}
root = previous;
}
};
Теперь цель моего маленького класса - создать единственно связанный список и иметь возможность его реверсировать.И, кажется, работает нормально, если я возвращаю узел с именем «предыдущий» в конце реверса.
Но посмотрите на мою основную функцию:
int main()
{
Node *root = new Node(1);
Node *num2 = new Node(2);
Node *num3 = new Node(3);
Node *num4 = new Node(4);
root->setNext(num2);
num2->setNext(num3);
num3->setNext(num4);
root->printList();
root->reverse(root);
root->printList();
return 0;
}
printList () был опущен дляради места, но он просто печатает список с данным узлом.Проблема в том, что когда вызывается root-> reverse (root), root фактически не указывает на «предыдущий».
Вывод будет следующим:
1
2
3
4
// the value of previous from the reverse function is 4
1
Iдействительно не понимаю выход.Кто-нибудь хочет объяснить, что происходит?(Почему список не переворачивается, даже если я сделал что-то вроде этого root = root-> reverse (root), где reverse возвращает предыдущий, так и будет) Почему этот root теперь указывает только на себя?Я новичок в C ++ и ценю вашу помощь!