c语言

  1. 首先创建单链表结构 2.实现插入函数 3.实现删除元素函数 4.实现打印函数 5.记录链表中要删除元素的个数 6.通过循环和删除函数实现单链表中的元素删除
#include<stdio.h>
#include<stdlib.h>
typedef struct Stu
{
	int data;
	struct Stu *next;
}Stu;

typedef struct LinkList
{
	Stu * next;
	int length;
}LinkList;

void InsertLinkList(LinkList * linkList, int pos, int n);//向单链表插入指定数据
void PrinttLinkList(LinkList * linkList);//遍历打印单链表数据
void DeleLinkList(LinkList * linkList, int n);//删除单链表中指定的元素

int main()
{
	int n = 0;
	int m = 0;
	scanf("%d", &n);
	LinkList linkList = {0};
	linkList.length = 0;
	for (int i = 0; i<n; i++)
	{
		scanf("%d", &m);
		InsertLinkList(&linkList, i + 1, m);
	}
	scanf("%d", &m);
	Stu * node = linkList.next;
	int count = 0;
	for (int i = 0; i<n; i++)
	{
		if (node->data == m)
			count++;
		node = node->next;
	}
	for (int i = 0; i < count; i++)
	{
		DeleLinkList(&linkList, m);
	}
	printf("%d\n", linkList.length);
	PrinttLinkList(&linkList);
	return 0;
}

void InsertLinkList(LinkList * linkList, int pos, int m)
{
	Stu * node = (Stu *)malloc(sizeof(Stu));//开辟空间
	node->data = m;	//保存要插入的数据
	node->next = NULL;

	if (pos == 1)
	{
		node->next = linkList->next;
		linkList->next = node;
		linkList->length++;
		return;
	}
	Stu * currNode = linkList->next;
	if (currNode)
	{
		for (int i = 1; i<pos - 1; i++)	//循环找到要插入的前一个结点
		{
			currNode = currNode->next;
		}
		node->next = currNode->next;
		currNode->next = node;
		linkList->length++;
	}
}

void PrinttLinkList(LinkList * linkList)
{
	Stu * node = linkList->next;
	for (int i = 0; i<linkList->length; i++)
	{
		printf("%d ", node->data);
		node = node->next;
	}
	printf("\n");
}

void DeleLinkList(LinkList * linkList, int m)
{
	Stu * node = linkList->next;
	Stu * preNode = NULL;

	for (int i = 1; node && i <=linkList->length; i++)
	{
		if (node->data == m)
		{
			if (i == 1)	//如果删除的位置是第一结点
			{
				linkList->next = node->next;
				free(node);
				linkList->length--;	//释放内存,长度-1
				return;
			}
			else
			{
				preNode->next = node->next;
				free(node);
				linkList->length--;	//释放内存,长度-1
				return;
			}
		}
		preNode = node;	//删除位置的前一个结点
		node = node->next;	//删除位置的结点
	}
}