单链表前插

复制代码
#include<stdio.h>
#include<malloc.h>
typedef struct list biao;
struct list 
{
    int data;
    biao* next;

}list1;
void dataprint(biao* point)
{
    biao* list1 = point;
    while (list1 != NULL)
    {
        printf("%d->", list1->data);
        list1 = list1->next;
    }
    printf("NULL\n");
}
void frontset(biao** point1, int x)
{
  
    biao* point2 = (biao*)malloc(sizeof(biao));
    if (point2 == NULL)
    {
        printf("error about point2");
        return;
    }
    point2->data = x;
    point2->next =*point1;
    *point1 = point2;
}
int main()
{
    biao *good = NULL;
    frontset(&good, 1);
    frontset(&good, 2);
    frontset(&good, 3);
    frontset(&good, 4);
    dataprint(good);
    return 0;
}

解析:

1.good指针的类型是list结构体类型,它指向了单链表的开头,而不是指向一块特定的表

2.为什么good的初始值为NULL?因为单链表的结尾是NULL,这样便于下面的前插操作

3.frontset函数解析:

1.为什么要使用二级指针?因为操作必须给到结构体指针good,因为这步的操作是前插新的表块,而不是改变旧的表块,它的作用只是改变指针good指向的位置,所以要使用二级指针对一级指针good的引用进行操作。

2.检查机制:当malloc申请不到新空间时就会返回空指针NULL,此时报错并直接结束函数

3.定义一块要插入的表,用x给data赋值,而用next指向原来的表头,表示在访问完新加的表块后访问原来的表头,而再把表头赋值为要插入的表表示将前插的新表块作为新的表头进行使用

4.为什么空间没有与形参一起被释放?使用malloc没有free,则会在return 0处进行释放,所以函数结束后不会被释放,在平时使用malloc要释放其空间,但在前插表中这块空间是要被保留的,所以不free

4.dataprint函数解析:

1.每次循环都把打印的节点后推一块,从第一块表打印到最后一块表

相关推荐
北城以北888824 分钟前
SSM--MyBatis框架之动态SQL
java·开发语言·数据库·sql·mybatis
木易 士心33 分钟前
Android 开发核心技术深度解析
android·开发语言·python
迷途之人不知返38 分钟前
链表相关的算法题(2)
数据结构·算法·链表
nju_spy42 分钟前
力扣每日一题(四)线段树 + 树状数组 + 差分
数据结构·python·算法·leetcode·面试·线段树·笔试
程序员烧烤44 分钟前
【Java基础14】函数式接口、lamba表达式、方法引用一网打尽(下)
java·开发语言
xie0510_1 小时前
排序算法
数据结构·算法·排序算法
lzq6031 小时前
Python虚拟环境全指南:venv与conda对比与实践
开发语言·python·conda
黑岚樱梦1 小时前
代码随想录打卡day25:56.合并区间
数据结构·算法
一念杂记1 小时前
没网太崩溃!手机电脑网络共享,简单几步搞定网络共享,再也不用为没网担忧~
android·windows
小年糕是糕手1 小时前
【数据结构】常见的排序算法 -- 插入排序
c语言·开发语言·数据结构·学习·算法·leetcode·排序算法