#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define OVERFLOW -2
typedef struct node{
int elem;
struct node *next;
}node;
node* initList(int n){
node *L=(node*)malloc(sizeof(node));
if(!L) exit(OVERFLOW);
L->next = NULL;
L->elem = 0;
node *p=L;
for(int i=1;i<=n;i++){
node *a=(node*)malloc(sizeof(node));
if(!a) exit(OVERFLOW);
a->elem=i;
a->next = NULL;
p->next=a;
p=p->next;
}
return L;
}
int selectElem(node *p,int elem){
int i=1;
p=p->next;
while(p){
if(p->elem==elem){
break;
}
p=p->next;
i++;
}
return i;
}
void amendElem(node *p,int oldelem,int newelem){
p=p->next;
while(p){
if(p->elem==oldelem){
p->elem=newelem;
break;
}
p=p->next;
}
}
void insertElem(node* p,int elem,int add){
node *temp =p;
node *a = NULL;
for(int i=1;i<add;i++){
temp = temp->next;
if(temp==NULL) return;
}
a = (node*)malloc(sizeof(node));
a->elem = elem;
a->next=temp->next;
temp->next=a;
}
void delElem(node *p,int elem){
node *temp =p;
while(temp->next){
if(temp->next->elem==elem){
break;
}
temp=temp->next;
}
temp->next=temp->next->next;
}
void printList(node *p){
p=p->next;
while(p){
printf("%d ",p->elem);
p=p->next;
}
printf("\n");
}
int main(){
int n=5;
node *L=initList(n);
printList(L);
insertElem(L,9,3);
printList(L);
delElem(L,9);
printList(L);
amendElem(L,3,9);
printList(L);
printf("%d\n",selectElem(L,9));
return 0;
}