Проблемы с правильной настройкой указателей при создании односвязного списка

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;

}

Это мой код, по какой-то причине, только первый узел печатает, а затем все заканчивается. Что я здесь не так делаю? Кроме того, какова идея сортировки связанного списка от низкого до высокого?

1

Решение

В основном то, что вы делаете:

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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]