单链表反置源码

来源:互联网 发布:支付宝怎么和淘宝绑定 编辑:程序博客网 时间:2024/06/05 20:47

一.头文件

#pragma once/*节点结构体*/typedef struct _LinkNode{void *data;struct _LinkNode *next;}LinkNode;/*头结点结构体*/typedef struct _LinkHead{LinkNode Head;int size;}LinkHead;typedef void* LINKLIST;/*打印函数指针*/typedef void(DATA_PRINT)(void*);/*初始化头结点*/LINKLIST Init_LinkList();/*指定位置插入*/void Insert_LinkList(LINKLIST list, int pos, LINKLIST data);/*打印链表*/void Print_LinkList(LINKLIST list, DATA_PRINT print);/*链表反置*/void Revers_LinkList(LINKLIST list);/*链表销毁*/void Destroy_LinkList(LINKLIST list);

二.c文件

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>#include "链表反置.h"/*打印函数*/void Myprint(LINKLIST data){printf("%s\n", (char*)data);}/*初始化头结点*/LINKLIST Init_LinkList(){LinkHead *head = (LinkHead*)malloc(sizeof(LinkHead));if (NULL == head){return NULL;}head->Head.data = NULL;head->Head.next = NULL;head->size = 0;return head;}/*指定位置插入*/void Insert_LinkList(LINKLIST list, int pos, LINKLIST data){if (NULL == list || NULL == data){return;}LinkHead *llist = (LinkHead *)list;if (pos < 0 || pos > llist->size){pos = llist->size;}LinkNode *pNewNode = (LinkNode*)malloc(sizeof(LinkNode));if (pNewNode == NULL){return;}pNewNode->data = data;pNewNode->next = NULL;LinkNode* pCurrent = &(llist->Head);for(int i = 0; i < pos; i++){pCurrent = pCurrent->next;}pNewNode->next = pCurrent->next;pCurrent->next = pNewNode;llist->size++;}/*打印链表*/void Print_LinkList(LINKLIST list, DATA_PRINT print){if (NULL == list){return NULL;}LinkHead* llist = (LinkHead*)list;LinkNode* pCurrent = &(llist->Head);for (int i = 0; i < llist->size; i++){pCurrent = pCurrent->next;print(pCurrent->data);}}/*销毁链表*/void Destroy_LinkList(LINKLIST list){if (list == NULL){return NULL;}LinkHead *llist = (LinkHead*)list;LinkNode *pCurrent = llist->Head.next;LinkNode *pDel = pCurrent;for (int i = 0; i < llist->size; i++){pCurrent = pCurrent->next;free(pDel);pDel = pCurrent;}}/*链表反置*/void Revers_LinkList(LINKLIST list){if (NULL == list){return NULL;}LinkHead* llist = (LinkHead*)list;if (NULL == llist->Head.next){return NULL;}LinkNode* p1 = llist->Head.next;LinkNode* p2 = p1->next;LinkNode* p3;while (p2){p3 = p2->next;p2->next = p1;p1 = p2;p2 = p3;}llist->Head.next = p1;return llist;}/*测试*/void test(){LinkHead *list = Init_LinkList();Insert_LinkList(list, 0, "你好");Insert_LinkList(list, 1, "你真好");Insert_LinkList(list, 2, "你真的好");Insert_LinkList(list, 3, "你真的好坏");Print_LinkList(list, Myprint);printf("--------------------------------\n");Revers_LinkList(list);Print_LinkList(list, Myprint);Destroy_LinkList(list);}int main() {test();system("pause");return EXIT_SUCCESS;}


0 0
原创粉丝点击