0

どうしたの?昇順で並べ替えるはずです。プログラムがクラッシュすることはありませんが、他の関数にリンクされたリストが無限ループに陥ってしまうため、何か問題があると確信している場合は。

#include <stdio.h>
#include <stdlib.h>

struct dataTag {
   int key;
};

struct nodeTag {
   struct dataTag data;
   struct nodeTag *pNext;
};
typedef struct dataTag dataStructType;
typedef struct nodeTag nodeStructType;

nodeStructType *SortList(nodeStructType *pFirst)
{
    nodeStructType *swap,*ptr;
    if(pFirst == NULL)
        return NULL;
    else
    {
        swap = pFirst;
        ptr = pFirst -> pNext;
        while(ptr != NULL)
        {
            if(ptr -> data.key < swap -> data.key)
                swap = ptr;
            ptr = ptr -> pNext;
        }
        swap -> pNext = SortList(pFirst -> pNext);
        return swap;
    }
}
int main(void)
{
   nodeStructType *pFirst;
   /* Lets say codes exists here that makes a link list etc just to make the code short*/
   pFirst = SortList(pFirst);
   /*Free List*/
   return 0;
}
4

1 に答える 1

1

ノードを交換してリストをソートすることはできません。これは、単方向リストをソートするプログラムへのリンクです。

基本的にライン は思い通りにはswap = ptr; いきません。リンクされたリストが正しくリンクされたままになるように、リンクを適切にリセットする必要があります。

于 2012-11-16T08:12:00.197 に答える