有一字符型单链表List,假设表中无重复值,现要在指定值y之前插入值x。插入成功时输出新表,否则输出“not found y”。
输入格式:
有多组数据,每组数据占两行,代表一次插入操作。 每组第一行有三个数,第一个为表长n(0<n<50),第二个为值y,第三个为值x;第二行为单链表的各元素值。
输出格式:
每组数据的输出占一行,输出如题。
输入样例:
在这里给出一组输入。例如:
5 d f
abcde
结尾无空行
输出样例:
在这里给出相应的输出。例如:
abcfde
结尾无空行
代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
char data;
struct Lnode *next;
}*LinkList,Lnode;
//初始化
void Init(LinkList &L){
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
}
//尾插法
void Creast_R(LinkList &L,int i){
LinkList r,p;
Init(L);
r=L;
while(i){
p=(LinkList)malloc(sizeof(Lnode));
scanf("%c",&p->data);
p->next=NULL;
r->next=p;
r=p;
i--;
}
}
//按值查找返回下标
int LocateElem(LinkList &L,char e){
LinkList p;
int j=1;
p=L->next;
while(p && p->data!=e){
p=p->next;
j++;
}
if(p){
return j;
}
else {
return 0;
}
}
//插入+输出
void Insert(LinkList &L,int i,char e){
LinkList p,s,q;
int j=0;
p=L;
while(p && j<i-1){
p=p->next;
j++;
}
if(!p||j>i-1){
printf("not found y");
}
else{
s=(LinkList)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
q=L->next;
while(q){
printf("%c",q->data);
q=q->next;
}
}
}
int main(){
int n,i=0;
char m,k;
while(~scanf("%d %c %c",&n,&m,&k)){
LinkList L;
getchar();
Creast_R(L,n);
i=LocateElem(L,m);
Insert(L,i,k);
printf("\n");
}
return 0;
}
同学三连呀🤭
欢迎交流