//链表 #include iostream #includestdio.h typedef int ElemType; typedef struct node { ElemType data; struct node* next; //node*相当于是挂钩指向node 结构体的指针 }Node; //初始化链表 Node* initList() { Node* head (Node*)malloc(sizeof(Node));//初始化出来一个头指针 head-data 0;//初始化data head-next NULL;//初始化next return head; } //头插法在头节点后插入节点p int insertHead(Node* L, ElemType e)//L就是链表需要传入e是p中要放的数据 { Node* p (Node*)malloc(sizeof(Node));//开辟位置放入p p-data e; p-next L-next; L-next p; return 1; } //遍历输出链表 void listNode(Node* L) { Node* p L-next; while (p ! NULL) { printf( %d\n, p-data); p p-next; } } //尾插法 //先获取尾节点 Node* get_tail(Node* L) { Node* tail L; while (tail-next ! NULL) { tail tail-next; } return tail; } Node* insertTail(Node* tail, ElemType e)//把p插到tail后边 { Node* p (Node*)malloc(sizeof(Node)); p-data e; tail-next p; p-next NULL; return p; } //在指定位置前插入数据p,q,p-next把q插入到p和p-next之间) int insertNode(Node* L, int pos, ElemType e)//pos从1开始算 { Node* p L; int i 0; while (i pos - 1) { p p-next; i; } if (p NULL) { return 0; } Node *q (Node*)malloc(sizeof(Node)); q-data e; q-next p-next; p-next q; return 1; } //删除节点q,p是q前边的节点。p,q,q-next int deleteNode(Node* L, int pos) { Node* p L; int i 0; while (i pos - 1) { p p-next; i; if (p NULL) { return 0; } } if (p-next NULL) { printf(要删除的位置错误\n); return 0; } Node* q p-next; p-next q-next; free(q); return 1; } //获取链表长度 int listLength(Node* L) { Node* p L; int len 0; while (p ! NULL) { p p-next; len; } return len; } //释放链表 void freeList(Node* L) { Node* p L-next; Node* q; while (p ! NULL) { q p-next; free(p); p q; } L-next NULL; } //主函数 int main() { Node* list initList(); insertHead(list, 10); insertHead(list, 20); insertHead(list, 30); insertTail(get_tail(list), 40); insertNode(list, 3, 25); deleteNode(list, 4); listNode(list); int len 0; len listLength(list); printf(%d\n, len); freeList(list); }笔记是跟着B站up主“逊哥带你学计算机”做的