c++ - 创建单链表时正确设置指针的问题

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

struct Number_Node
{
    int number;
    struct Number_Node* next_number;
};

int counter=0;

int main()
{
    int input=0;
    Number_Node* n;
    Number_Node* h;
    Number_Node* t;
    do
    {
        cout << "Enter Number: ";
        cin >> input;
        n = new Number_Node;
        n->number=input;
        t=n;
        if(counter==0)
        {
            h=n;
            counter++;
        }
        t->next_number=n;
        t=t->next_number;
        n->next_number=NULL;

    }while(input!=-1);

    Number_Node *tmpPtr;
    tmpPtr=h;
    while(tmpPtr!=NULL)
    {
        cout << tmpPtr->number << endl;
        tmpPtr=tmpPtr->next_number;
    }
    return 0;

}

这是我的代码,出于某种原因,只有第一个节点打印出来,然后事情就结束了。我在这里做错了什么?另外,从低到高排序链表背后的想法是什么?

最佳答案

基本上,您要做的是:

n = new Number_Node;
t=n;
t->next_number=n;
t=t->next_number;
n->next_number=NULL;

等于:

n = new Number_Node;
n->next_number=n;
n=n->next_number;
n->next_number=NULL;

这意味着您从未正确设置next_number 指针。您的代码应如下所示:

Number_Node* newNode  = NULL;
Number_Node* head     = NULL;
Number_Node* lastNode = NULL;
do
{
    // create new node:
    cout << "Enter Number: ";
    cin >> input;
    newNode = new Number_Node;
    newNode->number = input;
    newNode->next_number = NULL;

    // make last node to point to new node:
    if (lastNode)
        lastNode->next_number = newNode;

    // set the head:
    if (counter == 0)
    {
        head = newNode;
        counter++;
    }

    // store the last node:
    lastNode = newNode;

} while (input != -1);

关于c++ - 创建单链表时正确设置指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350745/

相关文章:

C 链表/-> 运算符

c++ - C++/OpenSSL将PEM加载到STACK_OF(X509)

c++ - 如果我将图像作为资源包含在我的 Visual Studio 项目中,这些图像是否会编译到可执行文件中?

c++ - 用于二进制分发的 clang 编译器标志(通用 CPU)

c - 这个头文件有什么问题?

c - C中双向链表的插入排序

c++ - 如何更新 QStringListModel?

C语言。如何将字符串添加到链接列表中

python - 如何在 Python 中使用 C 中的 float **?

java - Java 排序双向链表