LinkList.h
LinkList.c
LinkList.h
#pragma once #include <stdbool.h> typedef int Data; // 定义节点结构 typedef struct linkNode { Data data; struct linkNode* next; }linkNode; // 创建链表 linkNode* createList(); // 创建节点 linkNode* createNode(Data val); // 插入 //头插入 void pushfront(linkNode* list, Data val); //尾插入 void push_back(linkNode* list, Data val); //指定位置插入(下标) void insert_pos(linkNode* list, int pos, Data val); //指定位置插入(在指定元素之后) void insert_item(linkNode* list, linkNode* item, Data val); // 查找元素 linkNode* find(linkNode* list, Data data); // 删除 //头删 void pop_front(linkNode* list); //尾删 void pop_back(linkNode* list); //指定元素删除 void removeOne(linkNode* list, Data val); void removeA1l(linkNode* list, Data val); // 删除所有val bool isempty(linkNode* list); // 遍历 void show_list(linkNode* list);
LinkList.c
#include "LinkList.h" #include <stdio.h> #include <malloc.h> #include <string.h> linkNode* createList() { linkNode* head = malloc(sizeof(linkNode)); if (!head) { printf("head malloc failed"); return NULL; } memset(head, 0, sizeof(linkNode)); return head; } linkNode* createNode(Data val) { linkNode* newNode = malloc(sizeof(linkNode)); if (!newNode) { printf("newNode malloc falied"); return NULL; } newNode->data = val; newNode->next = NULL; return newNode; } void pushfront(linkNode* list, Data val) { linkNode* newNode = createNode(val); newNode->next = list->next; list->next = newNode; } void push_back(linkNode* list, Data val) { linkNode* newNode = createNode(val); linkNode* cur = list; while (cur->next) { cur = cur->next; } cur->next = newNode; } void insert_pos(linkNode* list, int pos, Data val) { linkNode* cur = list; linkNode* newNode = createNode(val); while (pos-- && cur->next) { cur = cur->next; } newNode->next = cur->next; cur->next = newNode; } void insert_item(linkNode* list, linkNode* item, Data val) { linkNode* newNode = createNode(val); newNode->next = item->next; item->next = newNode; } linkNode* find(linkNode* list, Data val) { linkNode* curNode = list->next; while (curNode) { if (curNode->data == val) { return curNode; } curNode = curNode->next; } return NULL; } void pop_front(linkNode* list) { linkNode* temp = list->next; list->next = list->next->next; free(temp); } void pop_back(linkNode* list) { linkNode* cur = list; linkNode* temp = NULL; while (cur->next && cur->next->next) { cur = cur->next; } free(cur->next); cur->next = NULL; } void removeOne(linkNode* list, Data val) { if (isempty(list)) return; linkNode* cur = list; while (cur->next) { if (cur->next->data == val) { break; } cur = cur->next; } //ɾ³ý if (cur->next) { linkNode* temp = cur->next; cur->next = cur->next->next; free(temp); } } void removeA1l(linkNode* list, Data val) { if (isempty(list)) return; linkNode* cur = list; linkNode* temp = NULL; while (cur->next) { if (cur->next->data == val) { temp = cur->next; cur->next = temp->next;lian free(temp); temp = NULL; } else { cur = cur->next; } } } bool isempty(linkNode* list) { return list->next == NULL; } void show_list(linkNode* list) { linkNode* cur = list->next; while (cur) { printf("%d ", cur->data); cur = cur->next; } printf("\n"); }
标签:linklist,cur,val,void,list,next,链表,linkNode From: https://www.cnblogs.com/miwaiwai/p/17298405.html