C++ 创建单链表时正确设置指针的问题 struct Number\u节点 { 整数; 结构编号\u节点*下一个\u编号; }; int计数器=0; int main() { int输入=0; 编号_节点*n; 节点数*h; 节点数*t; 做 { cout>输入; n=新编号\u节点; n->number=输入; t=n; 如果(计数器==0) { h=n; 计数器++; } t->next_number=n; t=t->next_编号; n->next_number=NULL; }while(输入!=-1); 编号_Node*tmpPtr; tmpPtr=h; while(tmpPtr!=NULL) { 下一个号码的密码; } 返回0; }

C++ 创建单链表时正确设置指针的问题 struct Number\u节点 { 整数; 结构编号\u节点*下一个\u编号; }; int计数器=0; int main() { int输入=0; 编号_节点*n; 节点数*h; 节点数*t; 做 { cout>输入; n=新编号\u节点; n->number=输入; t=n; 如果(计数器==0) { h=n; 计数器++; } t->next_number=n; t=t->next_编号; n->next_number=NULL; }while(输入!=-1); 编号_Node*tmpPtr; tmpPtr=h; while(tmpPtr!=NULL) { 下一个号码的密码; } 返回0; },c++,pointers,linked-list,singly-linked-list,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*

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

基本上,您要做的是:

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;
这意味着您从未正确设置
下一个\u编号
指针。您的代码应该如下所示:

n = new Number_Node;
n->next_number=n;
n=n->next_number;
n->next_number=NULL;
Number\u Node*newNode=NULL;
Number_Node*head=NULL;
Number_Node*lastNode=NULL;
做
{
//创建新节点:
cout>输入;
newNode=新编号\节点;
新建节点->编号=输入;
newNode->next_number=NULL;
//使最后一个节点指向新节点:
如果(最后一个节点)
lastNode->next_number=newNode;
//定下目标:
如果(计数器==0)
{
头=新节点;
计数器++;
}
//存储最后一个节点:
lastNode=newNode;
}while(输入!=-1);

基本上,您要做的是:

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;
这意味着您从未正确设置
下一个\u编号
指针。您的代码应该如下所示:

n = new Number_Node;
n->next_number=n;
n=n->next_number;
n->next_number=NULL;
Number\u Node*newNode=NULL;
Number_Node*head=NULL;
Number_Node*lastNode=NULL;
做
{
//创建新节点:
cout>输入;
newNode=新编号\节点;
新建节点->编号=输入;
newNode->next_number=NULL;
//使最后一个节点指向新节点:
如果(最后一个节点)
lastNode->next_number=newNode;
//定下目标:
如果(计数器==0)
{
头=新节点;
计数器++;
}
//存储最后一个节点:
lastNode=newNode;
}while(输入!=-1);

对于链表,最好的调试方法是把它画出来。对于链表,最好的调试方法是把它画出来。@MokammelHossainSanju:现在检查我的答案:)@LihO所以newNode是连接链接的临时节点,对吗?@MokammelHossainSanju:
newNode
是新创建的节点。这里很重要的是
lastNode
,即使创建了另一个
newNode
,它仍然指向最后一个节点。这允许你创建一个从
lastNode
newNode
的链接@LihO另外,我有点困惑
如果(lastNode)
正在做什么,你介意解释一下吗?@LihO-thanx很多,这就解释了一切。@MokammelHossainSanju:现在检查我的答案:)@LihO所以newNode是一个临时节点,可以连接这些链接,对吗?@MokammelHossainSanju:
newNode
是新创建的节点。这里很重要的是
lastNode
,即使创建了另一个
newNode
,它仍然指向最后一个节点。这允许你创建一个从
lastNode
newNode
@LihO的链接。另外,我有点困惑
如果(lastNode)
正在做什么,你介意解释一下吗?@LihO-thanx很多,这解释了一切。