我的单向链接列表有问题。是用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;
}