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);
Других решений пока нет …