版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处 https://blog.csdn.net/qq_21231413/article/details/89467730
1、定义链表节点以及表头数据结构
typedef struct ListNode{
struct ListNode* next;
}ListNode_t;
typedef struct LinkList{
ListNode_t header; //头结点
int length; //链表长度
}LinkList_t;
2、链表的初始化
LinkList_t * LinkListInit()
{
LinkList_t * list = (LinkList_t*)malloc(sizeof(LinkList_t));
if (list == NULL){
return NULL;
}
list->header.next = NULL;
list->length = 0;
return list;
}
3、指定位置插入链表节点
int LinkListInsert(LinkList_t* list, int pos, ListNode_t* node)
{
ListNode_t* current = &(list->header);
//如果 pos 位置超出链表长度,那么就插入到最后一个位置
if (pos > list->length) pos = list->length;
//找到插入的位置
for (int i = 0; i < pos; i ++){
current = current->next;
}
//新节点插入到 pos 位置
node->next = current->next;
current->next = node;
list->length++;
return 0;
}
4、删除指定位置链表节点
int LinkListDelete(LinkList_t* list, int pos)
{
if (pos > list->length-1){
printf("删除位置%d 不合法!\n",pos);
return -1;
}
ListNode_t* current = &(list->header);
//找到要删除的位置
for (int i = 0; i < pos; i++){
current = current->next;
}
//要删除的结点
ListNode_t* delNode = current->next;
//删除结点
current->next = delNode->next;
list->length--;
return 0;
}
5、判断链表是否为空
int IsEmptyLinkList(LinkList_t* list)
{
if (list->length == 0){
return 1;
}
return 0;
}
6、获取链表的节点数
int GetLengthLinkList(LinkList_t* list){
return list->length;
}
7.清空链表
void ClearLinkList(LinkList_t* list){
list->header.next = NULL;
list->length = 0;
}
8、销毁链表
void DestroyLinkList(LinkList_t* list)
{
if (NULL != list){
list->header.next = NULL;
list->length = 0;
free(list);
}
}