1

特異な連結リストを逆印刷するプログラムを試したところです。

リンクされたリストが 5 つの要素で準備ができていると仮定します。 1->2->3->4->5

次のように逆の順序で印刷するプログラムを作成しましたが、5 4 3 2 1
私のプログラムは次のように印刷され5 4 3 2ます。は1印刷されていません。なんで?

int Reverse_List(abc_t *pNode) {
    abc_t *pTemp;
    int count = 5;

    if (pNode->pNext != NULL) {
        pNode = pNode->pNext;
        Reverse_List(pNode);
        printf("The node is %d\n", pNode->a);
    }
}
4

2 に答える 2

13

多分このように

void Reverse_List(abc_t *pNode){
    if(pNode==NULL)
        return;

    Reverse_List(pNode->pNext);
    printf("The node is %d\n", pNode->a);
}
于 2013-06-06T11:39:16.353 に答える
3

通話の仕組みを見る

あなたはリスト1->2->3->4->5を持っています

今、再帰は次のように始まります

pnode = 1;    pnode->next=2; (!NULL)      (print 2)   
  pnode=2;    pnode->next=3; (!NULL)      (print 3)   
    pnode=3;    pnode->next=4 (!NULL)     (print 4)   
       pnode=4;   pnode->next=5 (!NULL)   (print 5)   
          pnode=5;   pnode->next==NULL

ここでわかるように、1つあると、ポインターを進めると2つが出力されます

正しいコードについては、@BLUEPIXYの回答を参照してください

于 2013-06-06T12:02:35.960 に答える