次のコードがあります。
int InsForward (TL2 p, void* x){
/* Inserta a node a step forward from the supplied p*/
TL2 h = (TL2)calloc(1,sizeof(TCel2));
if (!h)
return 0;
h->pre = p->pre;
h->nxt= p;
p->pre = h;
p->pre->nxt = h;
h->info = x;
return 1;
}
センチネルが既に割り当てられている循環リストに新しいノードを追加するにはどうすればよいですか? ノードが割り当てられているがリンクが壊れているため、何時間も悩まされていました。センチネルを除いて、それぞれに同じデータ値が表示されますが、これは問題ありません。
私が試したこと:
/* TCel a, int p, FILE fi*/
while(fscanf(fi,"%i%i", &(p.x), &(p.y)) == 2)
if ( InsForward(a, &p) == 0)
break;
構造体:
typedef struct cel2
{
struct cel2 *pre, *nxt;
void* info;
} TCel2, *TL2;
LE: コードを更新して、チェックするために次のように書きました: /* TL2 u*/
for (u = a->nxt; u != a; u = u->nxt)
printf("%i %i\n", u->info, u->info);
はい、情報は無効ですが、セルが異なるかどうかは興味がありました...いいえだと思います:
2686632 2686632 2686632 2686632 2686632 2686632
ここで何が起こっているのですか?!