#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; //指针域
//int m_size; //链表长度
}SingleList;
//初始化
SingleList* init_SingleList()
{
SingleList* list = malloc(sizeof(SingleList)); //开辟空间
if (list == NULL)
{
return NULL;
}
list->data = 0;
list->next = NULL;
//list->m_size = 0;
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; //让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;
}
//list->m_size++; //链表长度更新
return list;
}
//删除链表中所有值为value的数
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); //删除链表中所有值为value的数
if (flag == 1)
{
printf("删除后的链表:\n");
printf_SingleList(myList); //打印链表内容
}
else
printf("链表中没有与要删除的值相同的数!\n");
destory_SingleList(myList);
system("pause");
return EXIT_SUCCESS;
}
原文地址:https://www.jb51.cc/wenti/3287719.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。