我的单向链接列表有问题。是用C写的。
输入:

四五六
输出为
0 4 5 6个
所以0是不需要的。我做错了什么,错了通行证?在Add()函数中,看起来是这样的,首先“if”没有完成。但是为什么,因为通行证是空的。
ideone link to code
下面是一些代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct ELEMENT{
    int dane;
    struct ELEMENT *next;
}LIST;

void Add(LIST *FIRST, int x){
    LIST *ptr=FIRST,*el;

    el=(LIST*)malloc(sizeof(LIST));
    el->dane=x;
    el->next=NULL;

    if(ptr==NULL){
            ptr=el;
    }else{
        while(ptr->next!=NULL){
            ptr=ptr->next;
        }
        ptr->next=el;
    }
}

void Show(LIST *FIRST){
    LIST *ptr=FIRST;

    while(ptr!=NULL){
        printf("%d ",ptr->dane);
        ptr=ptr->next;
    }
    while(ptr!=NULL){
        ptr=ptr->next;
        free(ptr);
    }
}

LIST *HEAD=NULL;
int main()
{
    int i,counter,data;
    printf("Give me some data: \n");
    scanf("%d",&counter);

    for(i=0;i<counter;i++){
        scanf("%d",&data);
        Add(&HEAD,data);
    }

    printf("\nMy items:");
    Show(&HEAD);
    return 0;
}

最佳答案

例如,是固定的

void Add(LIST **FIRST, int x){
    LIST *ptr=*FIRST,*el;

    el=(LIST*)malloc(sizeof(LIST));
    el->dane=x;
    el->next=NULL;

    if(ptr==NULL){
            *FIRST=el;
    }else{
        while(ptr->next!=NULL){
            ptr=ptr->next;
        }
        ptr->next=el;
    }
}

void Show(LIST *FIRST){
    LIST *ptr=FIRST;

    while(ptr!=NULL){
        printf("%d ",ptr->dane);
        ptr=ptr->next;
    }
    ptr=FIRST;
    while(ptr!=NULL){
        LIST *tmp = ptr;
        ptr=ptr->next;
        free(tmp);
    }
}

LIST *HEAD=NULL;
int main()
{
    int i,counter,data;
    printf("Give me some data: \n");
    scanf("%d",&counter);

    for(i=0;i<counter;i++){
        scanf("%d",&data);
        Add(&HEAD,data);
    }

    printf("\nMy items:");
    Show(HEAD);
    return 0;
}

08-05 07:13