我有以下代码:
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
这里发生了什么?!