c语言链表的创建插入 删除 查找

运行不了
#include
#include
typedef struct node
{
int data;
struct node* next;
}NODE;
typedef NODE*LinkList;
void Option()
{
printf("1.链表的创建\n");
printf("2.链表的插入\n");
printf("3.链表的删除\n");
printf("4.链表的查找\n");
printf("0.退出\n");
}

void Print(LinkList Head)
{
while(Head->next!=NULL)
{
Head=Head->next;
printf("%d",Head->data);
}
printf("\n");
}

void CreateLinkList(LinkList *head)
{
system("cls");
if(head->next!=NULL)
{
printf("请勿重复创建链表!\n");
return;
}
else
printf("请输入5个数:\n");
LinkList end;
head=end=(LinkList)malloc(sizeof(NODE));
NODE *NewNode;
for(int i=1;i<=5;i++)
{
NewNode=(LinkList)malloc(sizeof(NODE));
scanf("%d",NewNode->data);
end->next=NewNode;
end=end->next;
}
end->next=NULL;
}

void InsertLinkList(LinkList *head)
{
system("cls");
if(head->next==NULL)
{
printf("请先创建链表!\n");
return;
}
Print(head);
int pos,num;
LinkList Link=head;
printf("请输入要插入的位置和数值:\n");
scanf("%d%d",&pos,&num);
while(Link->next!=NULL&&--pos)
Link=Link->next;
if(!pos)
{
NODE *NewNode;
NewNode=(LinkList)malloc(sizeof(NODE));
NewNode->data=num;
NewNode->next=Link->next;
Print(head);
}
else
printf("要插入的位置不存在!\n");
printf("\n");
}
void DeleteLinkList(LinkList &head)
{
system("cls");
if(head->next==NULL) //判断链表是否存在
{
printf("请先创建链表!\n");
return;
}
Print(head); //输出先前链表
int pos;
printf("请输入要删除的位置:\n");
LinkList Link=head;
scanf("%d",&pos);
whlie(Link->next!=NULL&&-- pos) //找到删除的位置
Link=Link->next;
if(!pos)
{
Link->next=Link->next->next;
Print(head);
}
else
printf("要插入的位置不存在!\n");
printf("\n");
}
void SearchLinkList(LinkList &head)
{
system("cls");
if(head->next==NULL) //判断链表是否存在
{
printf("请先创建链表!\n");
return;
}
Print(head);
int pos;
printf("请输入要查找数的位置:\n");
scanf("%d",&pos);
LinkList Link=head;
while(Link->next!=NULL&&-- pos) //找到查找的位置
Link=Link->next;
if(!pos)
printf("该位置上的数为%d",Link->next->data);
else
printf("要查找的数不存在!\n");
printf("\n");
}

int Choose() //选择函数
{
int k;
printf("请选择要进行的操作:\n");
scanf("%d",&k);
return k;
}
int main(int argc, char *argv[])
{
LinkList head;
head=(LinkList)malloc(sizeof(NODE)); //创建链表并分配地址
head->data=NULL;
head->next=NULL;
while(1)
{
Option();
switch(Choose())
{
case 1:CreateLinkList(head);
break;
case 2:InsertLinkList(head);
break;
case 3:DeleteLinkList(head);
break;
case 4: SearchLinkList(head);
break;
default :printf("输入错误!\n");
break;
case 0:return 0;
}
}
}

错误比较多,10元悬赏都少啊

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
    int data;
    struct node* next;
}NODE;
typedef NODE *LinkList;
void Option()
{
    printf("1.链表的创建\n");
    printf("2.链表的插入\n");
    printf("3.链表的删除\n");
    printf("4.链表的查找\n");
    printf("0.退出\n");
}

void Print(LinkList Head)
{
    while(Head->next!=NULL)
    {
        Head=Head->next;
        printf("%d ",Head->data);
    }
    printf("\n");
}

void CreateLinkList(LinkList head)
{
    system("cls");
    if(head->next!=NULL)
    {
        printf("请勿重复创建链表!\n");
        return;
    }
    else
        printf("请输入5个数:\n");
    LinkList end = head;
    for(int i=1;i<=5;i++)
    {
        NODE *NewNode=(LinkList)malloc(sizeof(NODE));
        scanf("%d",&NewNode->data);
        NewNode->next = NULL;
        end->next=NewNode;
        end = NewNode;
    }
    Print(head);
}

void InsertLinkList(LinkList head)
{
    system("cls");
    if(head->next==NULL)
    {
        printf("请先创建链表!\n");
        return;
    }
    Print(head);
    int pos,num;
    LinkList Link=head;
    printf("请输入要插入的位置和数值:\n");
    scanf("%d%d",&pos,&num);
    while(Link->next!=NULL&&--pos)
        Link=Link->next;
    if(!pos)
    {
        NODE *NewNode=(LinkList)malloc(sizeof(NODE));
        NewNode->data=num;
        NewNode->next=Link->next;
        Link->next = NewNode;
        Print(head);
    }
    else
        printf("要插入的位置不存在!\n");
    printf("\n");
}
void DeleteLinkList(LinkList head)
{
    system("cls");
    if(head->next==NULL) //判断链表是否存在
    {
        printf("请先创建链表!\n");
        return;
    }
    Print(head); //输出先前链表
    int pos;
    printf("请输入要删除的位置:\n");
    LinkList Link=head;
    scanf("%d",&pos);
    while(Link->next!=NULL&&-- pos) //找到删除的位置
        Link=Link->next;
    if(!pos)
    {
        Link->next=Link->next->next;
        Print(head);
    }
    else
        printf("要插入的位置不存在!\n");
    printf("\n");
}
void SearchLinkList(LinkList head)
{
    system("cls");
    if(head->next==NULL) //判断链表是否存在
    {
        printf("请先创建链表!\n");
        return;
    }
    Print(head);
    int pos;
    printf("请输入要查找数的位置:\n");
    scanf("%d",&pos);
    LinkList Link=head;
    while(Link->next!=NULL&&-- pos) //找到查找的位置
        Link=Link->next;
    if(!pos)
        printf("该位置上的数为%d\n",Link->next->data);
    else
        printf("要查找的数不存在!\n");
    printf("\n");
}

int Choose() //选择函数
{
    int k;
    printf("请选择要进行的操作:\n");
    scanf("%d",&k);
    return k;
}
int main(int argc, char *argv[])
{
    LinkList head;
    head=(LinkList)malloc(sizeof(NODE)); //创建链表并分配地址
    head->data=NULL;
    head->next=NULL;
    while(1)
    {
        Option();
        switch(Choose())
        {
        case 1:CreateLinkList(head);
            break;
        case 2:InsertLinkList(head);
            break;
        case 3:DeleteLinkList(head);
            break;
        case 4: SearchLinkList(head);
            break;
        default :printf("输入错误!\n");
            break;
        case 0:
            return 0;
        }
    }
}

修改处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
    int data;
    struct node* next;
}NODE;
typedef NODE* LinkList;
void Option()
{
    printf("1.链表的创建\n");
    printf("2.链表的插入\n");
    printf("3.链表的删除\n");
    printf("4.链表的查找\n");
    printf("0.退出\n");
}

void Print(LinkList Head)
{
    while(Head->next!=NULL)
    {
         Head=Head->next;
         printf("%d ",Head->data);//修改
    }
    printf("\n");
}

void CreateLinkList(LinkList head)
//void CreateLinkList(LinkList *head) 修改
{
    system("cls");
    if(head->next!=NULL)
    {
         printf("请勿重复创建链表!\n");
         return;
    }
    else
         printf("请输入5个数:\n");
    LinkList end;
    end = head; //head=end=(LinkList)malloc(sizeof(NODE));修改
    NODE *NewNode;
    for(int i=1;i<=5;i++)
    {
        NewNode=(LinkList)malloc(sizeof(NODE));
        NewNode->next = NULL;       //修改
        scanf("%d",&NewNode->data); //scanf("%d",NewNode->data);修改
        end->next=NewNode;
        end = NewNode;  //end=end->next;修改
    }
                        //end->next=NULL;修改
}

void InsertLinkList(LinkList head)
//void InsertLinkList(LinkList *head)修改
{
    system("cls");
    if(head->next==NULL)
    {
        printf("请先创建链表!\n");
        return;
    }
    Print(head);
    int pos,num;
    LinkList Link=head;
    printf("请输入要插入的位置和数值:\n");
    scanf("%d%d",&pos,&num);
    while(Link->next!=NULL && --pos)
        Link=Link->next;
    if(!pos)
    {
        NODE *NewNode;
        NewNode=(LinkList)malloc(sizeof(NODE));
        NewNode->data=num;
        NewNode->next=NULL;      //修改
        NewNode->next=Link->next;
        Link->next = NewNode;    //修改
        Print(head);
    }
    else
        printf("要插入的位置不存在!\n");
    printf("\n");
}

void DeleteLinkList(LinkList head)
//void DeleteLinkList(LinkList &head)修改
{
    system("cls");
    if(head->next==NULL) //判断链表是否存在
    {
        printf("请先创建链表!\n");
        return;
    }
    Print(head); //输出先前链表
    int pos;
    printf("请输入要删除的位置:\n");
    LinkList Link=head;
    scanf("%d",&pos);
    while(Link->next!=NULL && --pos) //找到删除的位置
    //whlie(Link->next!=NULL && --pos)修改
         Link=Link->next;
    if(!pos)
    {
        LinkList tmp = Link->next; //修改
        Link->next = tmp->next;    //修改
        //Link->next=Link->next->next;
        free(tmp);                 //修改
        Print(head);
    }
    else
        printf("要插入的位置不存在!\n");
    printf("\n");
}

void SearchLinkList(LinkList head)
//void SearchLinkList(LinkList &head) 修改
{
    system("cls");
    if(head->next==NULL) //判断链表是否存在
    {
        printf("请先创建链表!\n");
        return;
    }
    Print(head);
    int pos;
    printf("请输入要查找数的位置:\n");
    scanf("%d",&pos);
    LinkList Link=head;
    while(Link->next!=NULL && --pos) //找到查找的位置
        Link=Link->next;
    if(!pos)
        printf("该位置上的数为%d",Link->next->data);
    else
        printf("要查找的数不存在!\n");
    printf("\n");
}

int Choose() //选择函数
{
    int k;
    printf("请选择要进行的操作:\n");
    scanf("%d",&k);
    return k;
}
int main(int argc, char *argv[])
{
    LinkList head;
    head=(LinkList)malloc(sizeof(NODE));//创建链表并分配地址
    head->data=NULL;
    head->next=NULL;
    while(1)
    {
        Option();
        switch(Choose())
        {
        case 1:CreateLinkList(head);
               break;
        case 2:InsertLinkList(head);
               break;
        case 3:DeleteLinkList(head);
               break;
        case 4: SearchLinkList(head);
               break;
        default :printf("输入错误!\n");
               break;
        case 0:return 0;
        }
    }
    return 0;
}