我正在学习如何使用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的大小,并将列表显示到控制台,该列表始终为空白。我需要更改为现有代码以使我的函数将列表添加到列表中才能工作?
答案 0 :(得分:0)
mHead
始终为NULL
。您应该尝试更改它,以便将创建的第一个节点分配给mHead
。然后addNode
应该按预期工作。
我改变了这个
void addNode(string value)
{
Node* node = addNode(mHead, value);
if (mHead == NULL) mHead = node;
}
并能够将元素插入列表中。
答案 1 :(得分:0)
我已经纠正了代码中的一些问题:
例如:
这行代码:
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;
}
<强>结果:强>