我需要跟踪链表的开头和结尾
但我想使用辅助结构:
typedef struct difl{
Lint start, end;
} dselist;
Lint以这种方式定义:
typedef struct slist* Lint;
typedef struct slist{
int value;
Lint next;
} Nodo;
这是向末尾添加元素的功能:
void snocs(dselist *l, int x){
Lint new;
new = (Lint) calloc(1,sizeof(Nodo));
if(new==NULL){
printf("Error in memory allocation\n");
return;
}
new->value = x;
new->next = NULL;
if((*l).start==NULL & (*l).end==NULL){
(*l).start = new;
(*l).end = new;
}else{
((*l).end)->next = new;
(*l).end = new;
}
}
我用这种方式调用函数:
int main(){
Lint a = NULL;
Lint b = NULL;
dselist dl;
dl.start = a;
dl.end = b;
snocs(&dl, 5);
}
没有编译错误,似乎没有改变我的列表中的任何内容。
答案 0 :(得分:0)
此代码有效。
struct slist;
typedef struct slist* Lint;
typedef struct slist{
int value;
Lint next;
} Nodo;
typedef struct difl{
Lint start, end;
} dselist;
void snocs(dselist *l, int x){
Lint new;
new = (Lint) calloc(1,sizeof(Nodo));
if(new==NULL){
printf("Error in memory allocation\n");
return;
}
new->value = x;
new->next = NULL;
if((l->start==NULL) && l->end==NULL){
l->start = new;
l->end = new;
}else{
(l->end)->next = new;
l->end = new;
}
}
int main(){
Lint a = NULL;
Lint b = NULL;
dselist dl;
dl.start = a;
dl.end = b;
snocs(&dl, 5);
printf("%d\n", *dl.start); /* print 5*/
}