现要求删除单链表中的所有最小值(可能有多个),并输出删除后的新表。 该题要求在单链表上完成删除,若不按要求完成,则AC无效!!!
输入格式:
有多组数据,每组数据占两行: 每组第一行有一个整数,为表长n(0<n<50); 第二行为单链表的各元素值。
输出格式:
每组数据的输出占一行,每两个元素之间有一空格。若删除后的单链表为空表,则输出一空行。
输入样例:
在这里给出一组输入。例如:
5
12 24 4 54 15
5
12 4 4 54 15
结尾无空行
代码:
同学三连呀🤭
欢迎交流
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode* next;
}*LinkList,Lnode;
//初始化
void Init(LinkList &L){
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
L->data=0;
}
//尾插法
void Creat_R(LinkList &L,int i){
LinkList p=NULL,r=NULL;
Init(L);
r=L;
getchar();
while(i){
p=(LinkList)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next=NULL;
r->next=p;
r=p;
i--;
}
}
//找最小值
int find(LinkList L,int n){
LinkList p=NULL,q=NULL;
int min;
p=L->next;
q=p;
if(p){
min=p->data;}
while(p){
if(p->data<min){
min=p->data;
q=p;
}
p=p->next;
}
return q->data;
}
//删除
void Delete_L(LinkList &L,int e){
LinkList p=NULL,q=NULL;
p=L->next;
q=L;
while(p){
if(p->data==e){
q->next=p->next;
p=q->next;
}
else{
p=p->next;
q=q->next;}
}
}
//输出
void pri(LinkList L){
LinkList p=NULL;
p=L->next;
if(p){
while(p->next){
printf("%d ",p->data);
p=p->next;
}
printf("%d",p->data);
}
else{
return;
}
}
int main(){
int n;
while(~scanf("%d",&n)){
LinkList L;
int min;
Creat_R(L,n);
min=find(L,n);
Delete_L(L,min);
pri(L);
printf("\n");
}
return 0;
}