#include "iostream" using namespace std; int n,m,sum=0;// n是输入数据的个数 m是所要删除的数据 sum用来记录删除之后所剩的数的个数 const int m_size=100;//设置链表的长度为100 int arr[m_size];//定义链表 //以上的变量可以写在main函数中 为了减少函数调用所需的参数 设置为全局变量可以减少难度 typedef struct Link{ int date; struct Link *next; }link;//链表节点的结构体定义 link * init_link(){//此函数用来创建一个单链表并将初始化 link *p=nullptr;//头结点定义 link *temp=(link *)malloc(sizeof(link));//首元结点定义 temp->date=0; temp->next= nullptr; p=temp; for(int i=0;i<n;i++){ link *q=(link *)malloc(sizeof(link)); q->date=arr[i]; q->next=nullptr; temp->next=q; temp=temp->next; }//此for循环将输入的n个数据赋值到链表节点 return p;//返回链表的首地址 } link * fun(link *l){//实现链表中数据的查找并删除 最后输出(也可以写一个函数 实现输出功能) link *r=(link *)malloc(sizeof(link)); r=l; while (n--){//遍历链表 if(r->next->date==m){//若该节点的下一个节点的date值和m相等 进行链表删除操作 link * k= r->next;//表示当前节点 r->next=r->next->next;//进行链表节点的删除 free(k);//释放当前节点 避免内存泄漏 } else{ r=r->next;//若该节点不满足条件 遍历下一个 } } link * v=l; while (v){//实现剩于节点的计数 sum++; v=v->next; } cout<<sum-1<<endl; link *w = l->next; while (w){//实现链表节点数据的shuchu cout<<w->date<<" "; w=w->next; } return r->next; } int main() { cin>>n; for(int i=0;i<n;i++) cin>>arr[i]; cin>>m; link *P; P=init_link(); fun(P); }