Попытка добавить узел в конец LinkedList не работает

Я учусь использовать LinkedLists и столкнулся с проблемой при попытке их использования.

В моем файле функций у меня есть:

LinkedList::Node* LinkedList::addNode(Node* head, string value)
{
    if (head == NULL)
    {
        return new Node(value);
    }
    if (head->next == NULL)
    {
        head->next = new Node(value);
        return head;
    }
    else
    {
        addNode(head->next, value);
    }
}

В моем заголовочном файле у меня есть:

public:
LinkedList()
        {
            mHead = NULL;
        }

void addNode(string value)
        {
            addNode(mHead, value);
        }

private:
        struct Node
        {
            string value;
            Node* next;

            Node(string initValue, Node* initNext = NULL) :
                value(initValue), next(initNext)
            {}
        };

        Node* mHead;
        Node* addNode(Node* mHead, string value);

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

2 ответа

Решение

Я исправил некоторые проблемы в вашем коде:

например:

эта строка кода:

LinkedList::Node* LinkedList::addNode(Node* head, string value)

должно быть написано так:

struct LinkedList::Node* LinkedList::addNode(struct Node* head, std::string value)

Вот полный рабочий пример:

#include <iostream>  
#include <string>

class LinkedList {
    struct Node {
        std::string value;
        struct Node* next;

        Node(std::string initValue, Node* initNext = NULL) : value(initValue), next(initNext)
            {}
    };

    struct Node* mHead;
    struct Node* addNode(struct Node* head, std::string value);

    public:
        LinkedList()
        {
            mHead = NULL;
        }

        void addNode(std::string value)
        {
            addNode(mHead, value);
        }
};

struct LinkedList::Node* LinkedList::addNode(struct Node* head, std::string value)
{
    if (head == NULL)
    {
        if (mHead == NULL) {
            mHead = new Node(value);
            return mHead;
        }
        else{
            head = new Node(value);
            return head;
        }
    }
    if (head->next == NULL)
    {
        if (mHead ->next == NULL) {
            mHead->next = new struct Node(value);
            return mHead->next;
        }
        else{
            head->next = new struct Node(value);
            return head->next;
        }
    }
    else
    {
        addNode(head->next, value);
    }
}


int main()   
{  
    LinkedList myLinkedList;
    myLinkedList.addNode(std::string("value1"));
    myLinkedList.addNode(std::string("value2"));
    myLinkedList.addNode(std::string("value3"));
    myLinkedList.addNode(std::string("value4"));

    return 0;
} 

Результат:

введите описание изображения здесь

mHead всегда NULL, Вы должны попробовать изменить его так, чтобы первый созданный узел был назначен mHead, затем addNode должен работать как положено.

Я изменил это

    void addNode(string value)
    {
        Node* node = addNode(mHead, value);
        if (mHead == NULL) mHead = node;
    }

и смог вставить элементы в список.

Другие вопросы по тегам