这是一个链表,测试的时候,删除功能不能使用,可以帮我看看是哪里写的有问题吗


#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#pragma warning(disable:4996)
//建立小节点
typedef struct LinkNode
{
    struct LinkNode *next;
};
//建立链表
typedef struct LinkList
{
    int size;
    LinkNode head;
};

//打印函数指针
typedef void (*PRINTNODE)(LinkNode*);

//初始化
LinkList* Init_LinkList();
//插入
void Insert_LinkList(LinkList* list, int pos, LinkNode* data);
//删除
void Remove_LinkList(LinkList*list, int pos);
//释放链表
void Free_LinkList(LinkList* list);
//打印
int Print_LinkList(LinkList* list, PRINTNODE print);
//查找
int Find_LinkList(LinkList* list, LinkNode* data);
//获取链表长度
int Size_LinkList(LinkList* list);
#include"LINKLIST.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

/*****************
* 使用企业链表,不用新建节点
* 企业链表是内核链表的改进版
* 内核链表的节点是在下面,企业链表的节点在上面
* ********
* 把节点放下面,不容易找到指针域next,没都要考虑偏移问题,需要自己计算
******************/
//初始化
LinkList* Init_LinkList()
{
    //申请动态内存
    LinkList* list = (LinkList*)malloc(sizeof(LinkList));
    //初始化
    list->head.next = NULL;
    int size = 0;

    return list;
}
//插入
void Insert_LinkList(LinkList* list, int pos, LinkNode* data)
{
    if (list == NULL)
    {
        return;
    }
    if (data == NULL)
    {
        return;
    }
    //越界
    if (pos<0 || pos>list->size)
    {
        pos=list->size;
    }
    //查找插入位置
    LinkNode* pCurrect = &(list->head);
    for (int i = 0; i < pos; i++)
    {
        pCurrect = pCurrect->next;
    }

    //接入链表
    data->next = pCurrect->next;
    pCurrect->next = data;

    list->size++;
}
//删除
void Remove_LinkList(LinkList* list, int pos)
{
    if (list == NULL)
    {
        return;
    }
    //越界
    if (pos <0||pos>=list->size)
    {
        return ;
    }
    //查找位置
    LinkNode* pCurrect = &(list->head);
    for (int i = 0; i < pos; i++)
    {
        pCurrect = pCurrect->next;
    }
    //删除节点
    pCurrect->next=pCurrect->next->next;

    list->size--;
}
//释放链表
void Free_LinkList(LinkList* list)
{
    if (list == NULL)
    {
        return;
    }
    free(list);
    list->size = 0;
}
//打印
int Print_LinkList(LinkList* list, PRINTNODE print)
{
    if (list == 0)
    {
        return -1;
    }
    LinkNode* pCurrect = list->head.next;
    while (pCurrect != NULL)
    {
        print(pCurrect);
        pCurrect = pCurrect->next;
    }
}
//查找
int Find_LinkList(LinkList* list, LinkNode* data)
{
    if (list == NULL)
    {
        return -1;
    }
    if (data == NULL)
    {
        return -1;
    }
    //辅助指针变量
    LinkNode* pCurrect = list->head.next;
    int i = 0;
    while (pCurrect != NULL)
    {
        if (pCurrect != NULL)
        {
            break;
        }
        i++;
        pCurrect = pCurrect->next;
    }
    return i;
}
//获取链表长度
int Size_LinkList(LinkList* list)
{
    return list->size;
}
#include"LINKLIST.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct Person
{
    LinkNode node;
    char name[64];
    int age;
}Person;
void Myprint(LinkNode* data)
{
    Person* p = (Person*)data;
    printf("姓名:%s 年龄:%d\n ", p->name, p->age);
}
int main()
{
    //初始化
    LinkList* list = Init_LinkList();
    //创建数据
    Person p1, p2, p3;
    strcpy(p1.name, "aaa");
    strcpy(p2.name, "bbb");
    strcpy(p3.name, "ccc");
    p1.age = 13;
    p2.age = 15;
    p3.age = 14;
    //插入数据
    Insert_LinkList(list, 0, (LinkNode*)&p1);
    Insert_LinkList(list, 0, (LinkNode*)&p2);
    Insert_LinkList(list, 0, (LinkNode*)&p3);
    Print_LinkList(list, Myprint);
    printf("----------------------------\n");
    Remove_LinkList(list, 0);
    Print_LinkList(list, Myprint);
    Free_LinkList(list);
}