注册 登录
编程论坛 数据结构与算法

数据结构单链表,删除后再显示出现问题,求大神解答

寒韩丶 发布于 2017-10-04 16:06, 1808 次点击
#include<stdio.h>
#include<stdlib.h>
#include <malloc.h>
typedef int datatype;
typedef struct node{
    datatype data;
    struct node *next;
}Lnode;
Lnode *initialize();
int creatlist(Lnode *L);
int insert(Lnode *L);
int deletel(Lnode *L);
int show(Lnode *L);
int find(Lnode *L);
int main()
{
    Lnode *L;
    int s;
    printf("请选择你的操作:\n");
    printf("1.初始化\t");
    printf("2.创建\t");
    printf("3.插入\t");
    printf("4.删除\t");
    printf("5.查找\t");
    printf("6.显示\t");
    printf("0.退出\t");
    scanf("%d",&s);
    while(s!=0)
    {
        if(s==1)
        {
            L=initialize();
        }
        else if(s==2)
        {
            creatlist(L);
        }
        else if(s==3)
        {
            insert(L);
        }
        else if(s==4)
        {
            deletel(L);
        }
        else if(s==5)
        {
            find(L);
        }
        else if(s==6)
        {
            show(L);
        }
        else
        printf("输入有误!");
            printf("请选择你的操作:\n");
    printf("1.初始化\t");
    printf("2.创建\t");
    printf("3.插入\t");
    printf("4.删除\t");
    printf("5.查找\t");
    printf("6.显示\t");
    printf("0.退出\t");
    scanf("%d",&s);
    }
   
}
Lnode *initialize()
{
    Lnode *head,*p,*q;
    head=(struct node *)malloc(sizeof(struct node *));
    head->next=NULL;
    q=head;
    printf("头结点建立成功!\n");
    return (head);
}
int creatlist(Lnode *head)
{
    int m;
    Lnode *p,*q;
    printf("请输入建立链表的长度:\n");
    scanf("%d",&m);
    printf("请依次输入表中的值:");
    for(int i=1;i<=m;i++)
    {
        p=(Lnode *)malloc(sizeof(Lnode *));
        scanf("%d",&p->data);
        p->next =head->next;
        head->next=p;
    }
}
int insert(Lnode *head)
{
    Lnode *p;
    p=(Lnode* )malloc(sizeof(Lnode *));
    printf("请输入要插入的数据:\n");
    scanf("%d",&p->data);
    p->next=head->next;
    head->next=p;
    printf("插入成功!\n");
   
}
int find(Lnode *head)
{
    Lnode *p=head->next;
    int figure;
    printf("请输入要查找的数值:\n");
    scanf("%d",&figure);
   
    while(p!=NULL&&figure!=p->data)
    {
        p=p->next;
    }
    if(p==NULL)
    {
        printf("你要查找的数据不存在!\n");
    }
    else
        printf("你要查找的数据存在,它是%d\n",figure);
}
int deletel(Lnode *head)
{
    Lnode *m;
    Lnode *p=head->next;
    int figure;
    printf("请输入要删除的数据:\n");
    scanf("%d",&figure);
    while(p->next !=NULL&&p->next->data!=figure)
    {
        p=p->next;
    }
    if(p==NULL)
    {
        printf("你要删除的数据不存在!\n");
    }
    else
    {
        m=p;
        m->next=p->next->next ;
        printf("删除成功!\n");
        free(p);
    }
    return 1;
}
int show(Lnode *head)
{
    Lnode *p=head->next;
    while(p->next!=NULL)
    {
        printf("%d\n",p->data);
        p =p->next ;
    }
    printf("%d\n",p->data);
}
1 回复
#2
寒韩丶2017-10-04 16:52
回复 楼主 寒韩丶
好的,我修复好了
1