头插法新建链表

 将数据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循环里,这样下一次判断就是本次要输入的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值