Связанный список C ++ не сохраняет новые узлы - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь перейти от почти полностью Java-фона к освоению с C ++.Я практикуюсь, пытаясь создать базовый связанный список.

#include <iostream>
#include <string>

using namespace std;

struct node
{
    string data;
    node *next = NULL;
};

class linkedlist
{
    public:
    node *head;

    public:
    linkedlist()
    {
        head = NULL;
    }

    void addNode(string s)
    {
        node *newNode = new node;
        newNode->data = s;

        if(head == NULL)
            head = newNode;

        else
        {
            node *temp = head->next;

            while(temp != NULL)
                temp = temp->next;

            temp = newNode;
        }
    }

    void printList()
    {
        node *temp = head;

        while(temp != NULL)
        {
            cout << temp->data << '\n';

            temp = temp->next;
        }
    }
};

Проблема в том, что когда я добавляю новый узел, используя void addNode(string s), он не появляется, когда я пытаюсь напечатать список(начиная с головы) с void printList().

Например:

int main(int argc, const char * argv[])
{
    int n;
    string str;
    linkedlist list;

    cout << "Please enter the number of strings you'd like to enter:\n";
    cin >> n;

    for(int i = 0;i < n;i++)
    {
        string temp;

        cout << "Enter string #" << i + 1 << '\n';
        cin >> temp;

        list.addNode(temp);
    }

    cout << "This is your linked list: ";

    list.printList();

    return 0;
}

Используя main () выше, мои результаты становятся:

ЭтоВаш связанный список: (строка 1)

Я почти уверен, что неправильно использую указатели, но не понимаю почему.Я сделал столько копаний, сколько смогу, чтобы кое-что прояснить, как я могу поступать неправильно, но я ничего не понимаю.

Спасибо за любые разъяснения, которые вы, ребята, можете предоставить.

1 Ответ

2 голосов
/ 05 июня 2019

Проблема здесь:

        node *temp = head->next;

        while(temp != NULL)
            temp = temp->next;

        temp = newNode;

Вы просматриваете список, затем устанавливаете temp на значение newNode.Когда temp выходит из области видимости, значение для newNode не сохраняется нигде.

То, что вы хотите сделать, это установить указатель next последнего node на значение newNode, то есть

        node *temp = head;
        while(temp->next != NULL)
            temp = temp->next;
        temp->next = newNode;

Приведенный выше код пересекает список, пока не найдет node, который не имеет узла next, и не установит свой узел next в newNode,добавив его в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...