📄 list.c
字号:
#include <stdio.h>#include <stdlib.h>#include "list.h"List * Create_List(void){ List *temp; temp = malloc(sizeof(List)); temp->length = 0; temp->head = NULL; return temp; }void Destroy_List(List *li,DelData FreeData){ Node *temp = NULL,*bak=NULL; temp = li->head; while(temp) { bak = temp; FreeData(bak->data); temp = temp->next; } if(li) free(li);}void Add_Node(List *li,DataType data){ Node *new,*temp=NULL; new = malloc(sizeof(Node)); new->data = data; new->next = NULL; if(!li->head) { li->head = new; } else { temp = li->head; while(temp->next) { temp = temp->next; } temp->next = new; } li->length ++;}void Print_List(List *li,PrintData p){ Node *temp; temp = li->head; if(!temp) return; while(1) { p(temp->data); temp = temp->next; if (NULL == temp) break; }}void Insert_Node(List *li,InsertCond cond,DataType data){ Node *new,*temp; new = malloc(sizeof(Node)); new->data = data; new->next = NULL; if(!li->head)//if list is null { li->head = new;//insert new li->length ++; } if(1 == cond(li->head->data,data))//if head node fit { new->next = li->head; li->head = new; } else { temp = li->head; while(temp->next) { if(1 == cond(temp->next->data,data)) { new->next = temp->next; temp->next = new; li->length++; } temp = temp->next; } temp->next = new;//if find nothing, add last li->length ++; return; } }void Delete_Node(List *li,DelCond cond,DelData del){ Node *temp = NULL,*bak = NULL; temp = li->head; bak = li->head; while(temp && temp->next)//the node is not first node { if(1 == cond(temp->next->data))//include last node,compare next node 's data; { bak = temp->next;//backup the pointer of node want to del; temp->next = temp->next->next;//change pointer before del node del(bak->data);//free data if data include pointer free(bak);//free node li->length --; } else { temp = temp->next; } } if(1 == cond(li->head->data))//the node is first node { temp = li->head; li->head = temp->next; del(temp->data); free (temp); li->length --; }}List * Invert_List(List *li){ Node * pre = NULL,*cur=NULL,*nex=NULL; if(NULL == li->head || NULL == li->head->next) return li; else { pre = li->head; cur = pre->next; pre->next = NULL; while(nex = cur->next) { cur->next = pre; pre = cur; cur = nex; } li->head = cur; cur->next = pre; } return li; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -