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;

}

これは私のコードです。何らかの理由で、最初のノードのみが出力され、その後終了します。ここで何が間違っていますか?また、リンクされたリストを低いものから高いものへとソートする背後にある考え方は何ですか?

4

1 に答える 1

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);
于 2013-03-11T23:52:00.457 に答える