C语言之链表

链表是一种非连续的数据结构,不同于数组的连续地址,它通过指针链接各元素。文章介绍了链表的头插法、尾插法,以及如何根据数据动态插入。同时,阐述了删除指定节点的操作,并讨论了两种反转链表的方法:迭代法和递归法,强调了递归法中需将指针next置空的关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是链表

是一种数据结构,数据结构就是数据存放的思想。

链表是一串数据,地址不一定是连续的

与数组对比:数组地址也是连续的,但删一个元素或 者加一个元素将变得很麻烦。因而有了链表,链表就是在结构体里面定义一个指针,指向下一个结构体,这样就把结构体串起来了。

链表的动态编译时,要用指针是因为判断条件是NULL,而后插法,前插法用指针是因为要改变main函数里面next的值来实现链表的前插和后插。

尾插法:在p的后面插入。关键点:判断p是否为空;判断p的score是否等于data。等于的话,把new插进去,new->next=p->next;p->next=new。

 

头插法:在p前插入。关键在于要改变head,因为头可能会变,所以要用指针改变head。分两种情况:第一,判断第一个数是否是目标数。是的话直接在第一个数前面插入。代码为:struct test* head = p;   new->next=head; return new。

第二种情况,第一个不是目标,那就用while(p->next!=NULL),再用if判断p->next->score==data即可。

注意插入成功后要返回head,不然会陷入死循环一直打印要插入的数。

 删除指定节点:

链表动态创建之头插法

 链表动态创建之后插法

单链表实现反转(逆序输出)

方法1:迭代法

如图所示,创建三个指针。小方块从左到右的值分别为1、2、3,假设
是以1->2->3的方向,那么,如果想实现链表反转,可以让中间的mid->next
从原来指向end变为指向pre,然后三个指针整体向右移动,mid再指向pre,直到end指向了NULL为止。最后让头指针指向mid即可,此时方向变为3->2->1

方法二:递归

该方法是通过递归,使得指针指向最后一个结点,然后从后往前改变指针的指向,从而实现反转。

最重要一点,必须把p指针的next至为空,不然编译时会不断循环。

逻辑图如下:


 

if判断返回的p值是返回到上一层的函数中,不是返回到主函数里面,再通过else的操作,一层层的返回,直到返回到主函数里面去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值