设有头结点单链表,实现单链表删除

【输入形式】
第一行输入N,表示单链表表长为N;
第二行输入N个整数,建立有头结点单链表;
第三行输入一个整数M,表示删除结点位置为M(即第M个元素)。
【输出形式】
若删除成功,先输出删除结点的值;下一行输出删除后单链表的所有元素;
若删除不成功,输出error。
【样例输入1】
5
10 20 30 40 50
2
【样例输出1】
20
10 30 40 50
【样例输入2】
10
10 20 30 40 50 60 70 80 90 100
0
【样例输出2】
error


/*单链表删除*/

#include <stdio.h>
#include <stdlib.h>
#define  ERROR  0
#define  OK  1

typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

int CreateList(LinkList *L,int n)
{
    LNode *p,*q;
    int i;
    *L=(LinkList)malloc(sizeof(LNode));
    if(!*L)
        return ERROR;
    (*L)->next=NULL;
    p=*L;
    for(i=0;i<n;i++)
    {
        q=(LNode *)malloc(sizeof(LNode));
        if(!q)
            return ERROR;
        scanf("%d ",&q->data);
        q->next=NULL;
        p->next=q;
        p=q;
    }
    return OK;
}

int DelList(LinkList L,int i,ElemType *e)
{
    LNode *p=L,*s;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p||j>i-1)
        return ERROR;
    s=p->next;
    p->next=s->next;
    *e=s->data;
    free(s);
    return OK;
}

void PrintList(LinkList L)
{
    LNode *p;
    p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}

int main()
{
    LinkList L=NULL;
    int n,i;
    ElemType e;
    scanf("%d",&n);
    CreateList(&L,n);
    scanf("%d",&i);
    DelList(&L,i,&e);
    if(!DelList(&L,i,&e))
    {
        printf("error");
        return 0;
    }
    PrintList(L);
    return 0;
}

现在程序能成功编译,但是运行的时候输入完所有内容就直接结束了

修改见注释,供参考:

/*单链表删除*/
#include <stdio.h>
#include <stdlib.h>
#define  ERROR  0
#define  OK  1
typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;
int CreateList(LinkList *L,int n)
{
    LNode *p,*q;
    int i;
    *L=(LinkList)malloc(sizeof(LNode));
    if(!*L)
        return ERROR;
    (*L)->next=NULL;
    p=*L;
    for(i=0;i<n;i++)
    {
        q=(LNode *)malloc(sizeof(LNode));
        if(!q)
            return ERROR;
        scanf("%d ",&q->data);
        q->next=NULL;
        p->next=q;
        p=q;
    }
    return OK;
}
int DelList(LinkList L,int i,ElemType *e)
{
    LNode *p=L,*s;
    int j=0;
    while(p&&j<i-1)
    {
        p=p->next;
        j++;
    }
    if(!p->next || j>i-1)  //if(!p || j>i-1)
        return ERROR;
    s=p->next;
    p->next=s->next;
    *e=s->data;
    free(s);
    return OK;
}
void PrintList(LinkList L)
{
    LNode *p;
    p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
}
int main()
{
    LinkList L=NULL;
    int n,i;
    ElemType e;
    scanf("%d",&n);
    CreateList(&L,n);
    scanf("%d",&i);
                         //DelList(L,i,&e);
    if(DelList(L,i,&e))
    {
        printf("%d\n",e);
        PrintList(L);
    }
    else
        printf("error\n");
                         //PrintList(L);

    return 0;
}