尝试将一个节点添加到LinkedList的末尾不起作用

时间:2017-03-25 03:19:39

标签: c++ linked-list nodes

我正在学习如何使用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 个答案:

答案 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;
} 

<强>结果:

enter image description here