单链表(头插法)c语言实现

来源:b站 BV1Rb411F738```
//链表:结构体变量与结构体变量联系在一起
//动态创建链表:动态内存申请+模块化设计
//1.创建链表(创建一个表头表示整个链表)
//2.创建节点
//3.插入节点
//4.删除节点
//5.打印,遍历链表(可以用来做测试)
#include
#include
struct ListNode{
    int data;
    struct ListNode* next;
};
//创建链表
struct ListNode* creatList()//表头不需要数据
{
    struct ListNode* headNode=(struct ListNode*)malloc(sizeof(struct ListNode));
    //动态内存申请,使结构指针变成结构体变量
   // headNode->data=1;    表头可以被初始化,也可以不初始化,通常不初始化,形成差异化,让我们知道哪一个是表头
    headNode->next=NULL;
    return headNode;
}
//创建节点,节点就是结构体变量,插入节点前必须要有
struct ListNode* creatNode(int data)//注意:有数据域
{
    struct ListNode* newNode=(struct ListNode*)malloc(sizeof(struct ListNode));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
}
//打印节点
struct ListNode* printNode(struct ListNode* headNode)
{
    struct ListNode* pmove=headNode->next;
    while(pmove) //移动到尾就结束
    {
        printf("%d",pmove->data);
        pmove=pmove->next; //打印一个移动一个
    }
    printf("\n");
}
//插入节点——头插法
struct ListNode* insertNode(struct ListNode* headNode,int data) //参数:插入哪个链表,插入节点的数据是什么
{
    struct ListNode* newNode=creatNode(data); //插入前要创建
    newNode->next=headNode->next;
    headNode->next=newNode;
}
//删除节点——指定位置删除
struct ListNode* delete(struct ListNode* headNode,int postData)//参数:那个链表,要删除的数据是什么
{
    struct ListNode* postNode=headNode->next;
    struct ListNode* postNodeFront=headNode;
    if(postNode==NULL)//条件:链表为空
    {
        printf("无法删除,链表为空。");
    }
    else
    {
        while(postNode->data!=postData)
        {
            postNodeFront=postNode;
            postNode=postNode->next;
            if(postNode==NULL)
            {
                printf("没有找到,无法删除");
                return 0;//直接结束掉函数
            }
        }
    }
    postNodeFront->next=postNode->next;
    free(postNode); //释放空间
}
int main()
{
    struct ListNode* list=creatList(); //创建链表
    insertNode(list,1); //插入节点
    insertNode(list,2);
    insertNode(list,3);
    printNode(list);   //打印节点
    delete(list,2);    //删除节点
    printNode(list);
    system("pause");
    return 0;
}

你可能感兴趣的:(c,单链表,c语言,链表)