#include<stdio.h>
#include<stdlib.h>
typedef struct node
{    
    int data;
    struct node *next;
} Link,*Linklist;

Link head;

void create_list()
{
    Linklist p,q;
    int x;
    head.next=NULL;
    q=&head;
    scanf("%d",&x);
    p=(Link*)malloc(sizeof(Link));
    p->data=x;
    while(x!=0)
    {
        q->next=p;
        //p->next=NULL;
        q=p;
        q->next=NULL;
        scanf("%d",&x);
        p=(Link*)malloc(sizeof(Link));
        p->data=x;
    }    
}

void print_list()
{
    Linklist p;
    p=&head;
    //p=p->next;
    while(p->next!=NULL)
    {
    p=p->next;
    printf("%d ",p->data);    
    }
        printf("\n");
    //printf("%d ",p->data);
}

int del_list(int x)//删除链表中的元素x
{
    Linklist p,q;
    printf("请输入你要删除的元素x:\n");
    scanf("%d",&x); 
    p=&head;
    if(p==NULL)
    return 0;
    while(p->next!=NULL&&(p->next->data)!=x)
        p=p->next;
        if(p->next==NULL)
        return 0;
        q=p->next;
        p->next=q->next;
        free(q);
        return 0;
} 

int insert_list(int i,int e)//在第i个位置的前一位上插入元素e 
{
    int j=1;
    Linklist p,q;
    p=&head;
    printf("请输入你要插入元素的位置i和插入的元素e\n");
    scanf("%d%d",&i,&e);
    q=(Link *)malloc(sizeof(Link));
    q->data=e;
    while(j<i)
    {
        p=p->next;
        j++;
    }
    q->next=p->next;
    p->next=q;
    return 0;
}
int find_list(int i,int e)//查找链表中第一次出现的e,并输出他的位置 
{
    i=0;
    Linklist p;
    p=&head;
    printf("请输入你要查找的元素e:\n");
    scanf("%d",&e);
    while(p->next!=NULL)
    {
        p=p->next;
        i++;
        if(p->data==e)
        {
        printf("元素的位置为:%d",i);
        return 0;
        }
    }
    printf("没有找到该元素\n");
    return 0;
}

int main()
{
    int i,e,x;
    printf("请输入链表的元素,以零表示结束:\n");
    create_list();
    print_list();
    printf("请选择你的操作:\n");
    printf("0-->退出操作\n");
    printf("1-->删除操作\n");
    printf("2-->插入操作\n");
    printf("3-->查找操作\n");
    int d;
    scanf("%d",&d); 
    if(x==0)
    exit(0);
    while(d==1||d==2||d==3)
    {
        switch(d)
        {
            case 1:del_list(x);printf("\n");print_list();break;
            case 2:insert_list(i,e);printf("\n");print_list();break;
            case 3:find_list(i,e);printf("\n");print_list();break;
        }    
        printf("请选择你的操作:\n");
        scanf("%d",&d);
        if(x==0) exit(0);
    }
    return 0;
}