0

我有几个关于列表的问题。首先,这是我的代码:

#include <iomanip>
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

struct node {
    int x;
    node *next;
};

void main()
{
    node *root;
    node *curr;

    int exit = 0;
    string temp;
    root = new node;
    root->next = 0;
    curr = root;
    cout << "Please enter the root number: ";
    cin >> root->x;

    for( int i=0; i<10; i++)//Will promt user to enter numbers
    {
        cout << "Enter string name for new node: ";
        cin >> temp;
    }

    if (curr != 0)//Used for traversing the LL and outputting
    {
        while (curr->next != 0)
        {
            cout << curr->x;
            curr = curr->next;
        }
    }
}

我希望提示用户在 for 循环中输入一个数字以添加到第一个节点。但是我对在根目录之外创建更多节点感到困惑。他们必须为每个节点使用不同的名称吗?我看到我在哪里创建了一个名为 root 的新节点。我必须为每个节点都这样做吗?如果我这样做,我可以让用户输入该节点的名称并让程序写入该名称吗?

4

1 回答 1

1

要创建超过根的更多节点,只需执行相同的操作:

 // assuming 'curr' points to end of list
 curr->next = new node;  // here's the new node
 curr = curr->next;      // update curr (if you want) to point to the newest node
 curr->next = 0;         // probably should be done in nodes ctor

您不会“命名”新节点,您只有“root”和“curr”。要查找任何一个节点,请从“根”开始并遍历到您想要的那个。当然,您可以将 ptrs 保存到某些节点以便更快地访问,但这将特定于特定应用程序。

同样在您当前的输入循环中:

for( int i=0; i<10; i++)//Will promt user to enter numbers
{
    cout << "Enter string name for new node: ";
    cin >> temp;
}

用户输入一个值 10 次,但每次都输入“temp”。所以它一直被覆盖。

于 2012-11-07T19:58:49.490 回答