关于链表的理解(不定期更新)

关于链表的创建(以创建学生信息链表为例):

【高亮】以下代码全基于此链接!

【1】struct student* create()中函数名前的*表示:函数返回的是一个struct student类型的指针

【2】要判断开辟节点有没有成功
如果失败,则返回NULL,表示链表创建失败;
如果成功,则head=p1,表示链表已创建(注意!此时头指针还没有学生信息!)。

p1=(struct student*)malloc(sizeof(struct student));  //开辟一个新节点
if(p1==NULL)  //节点开辟失败 
{
    printf("\n【出错】新建学生信息列表失败!请稍后再试!\n");
    return NULL;
}
else  //节点开辟成功 
{
    head=NULL;  //确保信息无效的情况下链表也为空
    ...
    ... //录入学生信息 
    p2=p1;  //保存p1以备后用
}

【3】要对节点数进行判断
节点数=1,head=p1(此时头节点才有学生信息),p1、p2、head此时都表示最后一个节点,next指向NULL;
节点数>1,原来最后的节点p2指向新创建的节点p1,p2再保存p1,以备p1继续开辟。

while(number!=0)  //只要学生学号不为0 
{
    n+=1;  //节点数加1
    if(n==1)  //如果节点数为1,则head就是p1 
    {
        head=p1;
        p2->next=NULL;  //此时p2=p1,即p1->NULL 
    } 
    else
    {
        p2->next=p1;  //p2指向刚开辟的新节点
    }
    p2=p1;  //默认p1为最后一个结点,且方便p1继续开辟新节点 
    p1=(struct lianxiren*)mallo(SIZE);   //p1继续开辟新节点
    ...
    ...  //录入信息
    } 

【4】创建链表完成的时候,最后一个节点p2要指向NULL,且释放**p1分配到的空间,并将之赋**NULL

p2->next=NULL;  //链表最后一个节点指向NULL 
free(p1);  //释放p1开辟的空间 
p1=NULL;  //把p1赋值,不然就是野指针 

【5】函数返回值是链表的头指针(因为链表只可从头开始遍历)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值