c语言实现单链表的及各项基本功能

来源:互联网 发布:宁波知豆电动汽车公司 编辑:程序博客网 时间:2024/05/16 11:42
单链表的各项基本功能都在以下的函数中实现
//录入数据ListNode* BuyNode(DataType x){ListNode* node = (ListNode*)malloc(sizeof(ListNode));node->data = x;node->next = NULL;return node;}//打印void PrintList(ListNode* pList){ListNode* cur = pList;while (cur){printf("%d->", cur->data);cur = cur->next;}printf("NULL");}//尾插void PushBack(ListNode** ppList, DataType x){//1,空//2,非空if (*ppList == NULL){*ppList = BuyNode(x);}else{ListNode* tail = *ppList;while (tail->next){tail = tail->next;}tail->next = BuyNode(x);}}//尾删void PopBack(ListNode** ppList){//1,空//2,一个//3,多个if ((*ppList) == NULL)//空{return;}else if ((*ppList)->next == NULL)//一个{free(*ppList);*ppList = NULL;}else//多个{ListNode* prev = NULL;ListNode* tail = *ppList;while (tail->next){prev = tail;tail = tail->next;}free(tail);tail = NULL;prev->next = NULL;//让上一个结点的next置空}}//头插void PushFront(ListNode** ppList, DataType x){//1,空//2,非空if ((*ppList) == NULL){*ppList = BuyNode(x);}else{ListNode* tmp = *ppList;*ppList = BuyNode(x);(*ppList)->next = tmp;}}//头删void PopFront(ListNode** ppList){//1,空//2,一个//3,多个if ((*ppList) == NULL){return;}else if ((*ppList)->next == NULL){free(*ppList);*ppList = NULL;}else{ListNode* tmp = *ppList;*ppList = tmp->next;free(tmp);}}//查找ListNode* Find(ListNode* pList, DataType x){ListNode* cur = pList;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;}// 在pos的前面插入一个节点xvoid Insert(ListNode** ppList, ListNode* pos, DataType x){assert(ppList);assert(pos);//1,头插//2,中间插入if ((*ppList)->next == NULL){PushFront(ppList,x);}else{ListNode* prev = *ppList;while (prev->next != pos){prev = prev->next;}ListNode* tmp = BuyNode(x);prev->next = tmp;tmp->next = pos;}}//删除void Erase(ListNode** ppList, ListNode* pos){//1,头//2,尾//3,中间assert(pos);if (*ppList == pos){PopFront(ppList);}else if (pos->next == NULL){PopBack(ppList);}else{ListNode* prev = *ppList;while (prev->next != pos){prev = prev->next;}prev->next = pos->next;free(pos);}}

原创粉丝点击