跟踪链表的开头和结尾

时间:2015-05-13 18:43:27

标签: c

我需要跟踪链表的开头和结尾

但我想使用辅助结构:

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);
}

没有编译错误,似乎没有改变我的列表中的任何内容。

1 个答案:

答案 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*/

}