Как передать голову из основного в функцию addNode?(Реализация LinkedList через структуру) - PullRequest
0 голосов
/ 23 декабря 2018

В приведенном ниже коде я передаю указатель головы из основной функции в функцию addNode, так что я резервирую позицию указателя головы (также передаю ее другим функциям, связанным с LinkList для выполнения других операций), но приведенный ниже код не работаеткак и ожидалось, каждый раз, когда я вызываю функцию addNode, я получаю Head node Created, правильно ли я передаю указатель на addNode?Как мне достичь цели зарезервировать указатель головы в список и отправить его в функцию addNode из main()?

using namespace std;

struct stud {
    string stud_name;
    string stud_roll:
    stud *next_node;
};

void addNode(stud* head);


int main()
{   stud *head = nullptr;
    addNode(head);
    addNode(head);
    addNode(head);
    addNode(head);
    addNode(head);
}

void addNode(stud* head)
{

    stud *new_node = new stud;
    new_node->next_node = NULL;

    if (head == NULL)
    {
        head = new_node;
        cout << "Head node Created" << endl;
    }
    else
    {
        stud *temp_head = NULL;
        temp_head = head;

        while (temp_head->next_node != NULL)
        {
            temp_head = temp_head->next_node;
            cout << "Moving temp pointer" << endl;
        }
        temp_head->next_node = new_node;
        cout << "Body node created" << endl;
    }
}

1 Ответ

0 голосов
/ 23 декабря 2018

Что вы здесь делаете, передаете указатель на функцию и размещаете его в функции (локально), и вы хотите, чтобы этот локальный указатель был доступен и повторно использовался вне области действия функции.Вы видите проблему?

Выделение переданной головы (копирование при передаче) в области действия функции повлияет на область действия функции.Что вы можете сделать, это передать этот указатель по ссылке.Таким образом, ваш код изменится так:

struct stud {
    string stud_name;
    string stud_roll;
    stud *next_node;
};

void addNode(stud *&head);

int main()
{
    stud *head = nullptr;
    addNode(head);
    addNode(head);
    addNode(head);
    addNode(head);
    addNode(head);
}

void addNode(stud *&head)
{

    stud *new_node = new stud;
    new_node->next_node = NULL;

    if (head == NULL)
    {
        head = new_node;
        cout << "Head node Created" << endl;
    }
    else
    {
        stud *temp_head = NULL;
        temp_head = head;

        while (temp_head->next_node != NULL)
        {
            temp_head = temp_head->next_node;
            cout << "Moving temp pointer" << endl;
        }
        temp_head->next_node = new_node;
        cout << "Body node created" << endl;
    }
}
...