
#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 = 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;
}
int delete_SingleListByValue(SingleList* list, int value)
{
SingleList* pMove, * delete, * pre;
int flag = 0;
if (list == NULL)
exit(0);
pre = list;
pMove = list->next;
while (pMove != NULL)
{
if (pMove->data == value)
{
delete = pMove;
pre->next = pMove->next;
pMove = pMove->next;
free(delete);
flag = 1;
}
else
{
pre = pMove;
pMove = pMove->next;
}
}
return flag;
}
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;
int value, flag;
list = init_SingleList();
myList = create_SingleListByTail(list);
printf("删除前的链表:\n");
printf_SingleList(myList);
printf("请输入要删除的值:");
scanf_s("%d", &value);
flag = delete_SingleListByValue(myList, value);
if (flag == 1)
{
printf("删除后的链表:\n");
printf_SingleList(myList);
}
else
printf("链表中没有与要删除的值相同的数!\n");
destory_SingleList(myList);
system("pause");
return EXIT_SUCCESS;
}

