#include<stdio.h>
struct node{
node* next;
int data;
};
int main(){
int n,key;
while(scanf("%d",&key)!=EOF){
scanf("%d",&n);
node* head=new node;
node* temp;
node* pre;
pre=head;
for(int i=0;i<n;i++){//进行读入操作
temp=new node;
temp->next=NULL;
scanf("%d",&temp->data);
pre->next=temp;
pre=temp;
}
temp=head->next;
node* temp2;
temp2=head;
while(temp!=NULL&&key>temp->data){
temp2=temp;//temp2指向temp的前一个
temp=temp->next;
}
node* p=new node;
if(temp==NULL){//说明key是最大的,应该放到尾结点的位置
printf("no\n");
p->data=key;
p->next=NULL;
temp->next=p;
}else if(key==temp->data){//交换两个节点的数据域即可
printf("相同元素为:%d\n",key);
int tp=temp->next->data;
temp->next->data=temp->data;
temp->data=tp;
}else{
printf("no\n");
p->data=key;
p->next=temp;
temp2->next=p;
}
temp=head->next;
while(temp!=NULL){
printf("%d ",temp->data);
temp=temp->next;
}
}
return 0;
}
要注意的点:
1.注意利用前驱节点
2.注意采取交换节点的数据域的方式