单链表的删除
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int datatype;
datatype flag=-1;
typedef struct node
{
datatype data; //数据域
struct node *next; //指针域
} LNode, * linkList;
linkList Creat_linkList()
{
linkList L,s,r;
L=(linkList)malloc(sizeof(LNode));
L->next=NULL;//创建头结点
r=L;
int a;
while(scanf("%d",&a))
{
if(a==-1)
break;
s=(linkList)malloc(sizeof(LNode));
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;
return L;
}
void Output_linkList(linkList L) //输出函数
{
LNode *p=L;
while (p->next!= NULL)
{
printf("%d;",p->next->data);
p=p->next;
}
}
int Del_linkList(linkList L,int i)
{
//待补全,删除单链表L上的第i个数据结点
int j=0;//j置为0(即头结点的序号为0)
LNode *p=L,*q;//p指向头结点
if (i<=0)
{
return 0;
}
while (j<i-1 && p!=NULL)
{
j++;
p=p->next;
}
if (p==NULL)
{
return 0;
}
else
{
q=p->next;//q指向第i个结点
if (q==NULL)
{
return 0;
}
p->next=q->next; //从单链表中删除q结点
free(q);//释放q结点
return 0;
}
}
//删除的
void main()
{
int n;
linkList L=Creat_linkList();
scanf("%d",&n);
Del_linkList(L,n);
Output_linkList(L);
}