【输入形式】
第一行输入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;
}
现在程序能成功编译,但是运行的时候输入完所有内容就直接结束了