Попытка добавить узел в конец 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;
}
и смог вставить элементы в список.