C ++链接列表不保留新节点

时间:2019-06-05 01:29:44

标签: c++ pointers struct linked-list singly-linked-list

我正试图从几乎完全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 个答案:

答案 0 :(得分:2)

问题在这里:

        node *temp = head->next;

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

        temp = newNode;

您正在遍历列表,然后将temp设置为newNode的值。当temp超出范围时,newNode的值不会存储在任何地方。

您要执行的操作是将最后一个next的{​​{1}}指针设置为node的值,即

newNode

上面的代码遍历列表,直到找到没有 node *temp = head; while(temp->next != NULL) temp = temp->next; temp->next = newNode; 节点的node,并将其next节点设置为next,从而添加到列表中。