
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <Windows.h>
typedef struct node
{
int data;
struct node* next;
}SingleList;
SingleList* init_SingleList()
{
SingleList* list;
list = (SingleList*)malloc(sizeof(SingleList));
if (list == NULL)
{
return NULL;
}
list->data = 0;
list->next = NULL;
return list;
}
SingleList* create_SingleListByTail(SingleList* list)
{
SingleList* head, * pCreate, * pMove;
int num, data;
head = (SingleList*)malloc(sizeof(SingleList));
head = list;
if (head == NULL)
{
return NULL;
}
else
{
head->next = NULL;
}
pMove = head;
printf("请输入要插入的结点数:");
scanf_s("%d", &num);
for (int i = 0; i < num; i++)
{
scanf_s("%d", &data);
pCreate = (SingleList*)malloc(sizeof(SingleList));
if (pCreate == NULL)
{
return NULL;
}
pCreate->data = data;
pCreate->next = NULL;
pMove->next = pCreate;
pMove = pCreate;
}
return list;
}
void reverse_SingleList(SingleList* list)
{
SingleList* pMove, * pre = NULL, * pBehind;
if (list == NULL)
exit(0);
pMove = list->next;
while (pMove != NULL)
{
pBehind = pMove->next;
pMove->next = pre;
pre = pMove;
pMove = pBehind;
}
list->next = pre;
}
void destory_SingleList(SingleList* list)
{
SingleList* currentNode, * nextNode;
currentNode = list->next;
while (currentNode != NULL)
{
nextNode = currentNode->next;
free(currentNode);
currentNode = nextNode;
}
free(list);
list = NULL;
}
void printf_SingleList(SingleList* list)
{
SingleList* pMove;
pMove = list->next;
while (pMove != NULL)
{
printf("%d ", pMove->data);
pMove = pMove->next;
}
printf("\n");
}
int main(void)
{
SingleList* list, * myList;
list = init_SingleList();
myList = create_SingleListByTail(list);
printf("初始链表为:\n");
printf_SingleList(myList);
reverse_SingleList(myList);
printf("逆置后的链表为:");
printf_SingleList(myList);
destory_SingleList(myList);
system("pause");
return EXIT_SUCCESS;
}
