-2
二重にリンクされたリストをソートしようとしていますが、何か問題があります。私はCでnoobだと私は私の問題は、ポインタと思われる...C Bubblesort in LinkedList
私はちょうどリスト内の2つの位置を交換する方法を見ることはできませんと多分それは問題です。
私はBubblesortを使ってそれを並べ替えることを試みました。それは複雑さがそれほど良くないことを知っていても、私はまだ学習しているので、簡単に始めることができたと思ったからです。
私ものLinkedListの要素をswapingとどのようにそれらを並べ替えるために約いくつかのものを読んでtryiedが、私は本当にこの問題にこだわって...
PS:私はとのために始めたM->次の私のリストにはヘッダー(m)があります。
PS2:私は「何かない構造体または共用で、 『次へ』メンバーの要求」エラーを取得しています、そしてそれは
struct segment {
int x, y; /// position
char c; // letter
struct segment* next;
struct segment* prev;
};
void sortingSegments(struct segment* m) {
struct segment **j; struct segment **i;
for(i = &((m->next)->next); i !=NULL; i = i->next) {
for(j = &(m->next); j == i; j = j->next) {
if ((*j)->c > (*i)->c) {
struct segment **aux;
aux = i;
(*aux)->next = (*i)->next;
(*aux)->prev = (*i)->prev;
i = j;
(*i)->next = (*j)->next;
(*i)->prev = (*j)->prev;
j = aux;
(*j)->prev = (*aux)->prev;
(*j)->next = (*aux)->next;
}
}
}
}
あなたの問題はポインタです。最初のノードが位置を変更し、リストアドレスが変更された場合を処理するために、リストのアドレス( 'm')だけでなく、リストのアドレスを渡す必要があります。だからあなたは 'sortingSegments(struct segment ** m)'が必要です。単純に 'segment * j、.. * i'を使い、間接指示の残りのレベルを調整することができます。最初のノードがスワップされた場合は、 '* m = new_first_node_address;'を設定することを忘れないでください。そうしないと、ソート後にリストが破損します。 –