将数据3 4 5存入链表,以9999为结束标志
输入3 4 5 9999,链表中数据为3 4 5
#include<stdio>
#include<stdlib.h>
typedef int elem;
typedef struct lnode{
elem data;
struct lnode *next;
}lnode,*link;//定义结点类型
void listhead(link &L){
L=(link)malloc(sizeof(lnode));//申请头节点,让头指针指向头节点,注意大小应是一个结点而不是指针
elem x;
scanf("%d",&x);
link s;
s=(link) malloc(sizeof (lnode));
s->data=x;
s->next=NULL;
L->next=s;
while(x!=9999){
scanf("%d",&x);
s=(link) malloc(sizeof (lnode));
s->data=x;
s->next=L->next;
L->next=s;
}
}
int main(){
link L;//定义头指针
listhead(L);//插入函数
return 0;
}
这是第一次的代码,运行后发现有bug,把9999也存入了链表,原因是第一个数据在while循环外就输入了(x=3),所以while判断条件一直判断的是上一个输入的数,输入5过后下一次循环判断5!=9999,然后9999就输入进去了,所以需要对代码进行修改。
#include<stdio.h>
#include<stdlib.h>
typedef int elem;
typedef struct lnode{
elem data;
struct lnode *next;
}lnode,*link;
void listhead(link &L){
L=(link) malloc(sizeof(lnode));
elem x;
L->next=NULL;
scanf("%d",&x);
link s;
while(x!=9999){
s=(link) malloc(sizeof (lnode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
}
int main(){
link L;
listhead(L);
return 0;
}
新的代码把第一个数据输入也放进了while循环里,这样下一次判断就是本次要输入的值。