/****************************************************************
该程序实现结点的删除。
其中void *del_node(TYM *head,int pos,int len)函数用于删除结
点,head为需要删除结点的链表、pos为结点的位置、len为需要删除
的长度。
****************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef struct stu //定义TYM类型
{
char name[20];
int num;
struct stu *next;
}TYM;
void *del_node(TYM *head,int pos,int len) //删除结点指针函数
{
int i;
TYM *p,*q;
if(pos==1) //如果删除的位置是首地址
{
for(i=0;i<len;i++) //删除len个结点
{
p = head; //使p指向head
head = head->next; //使head指向下一个结点
free(p); //释放p指向的结点
}
}
else
{
for(p=head,i=1;i<pos-1;i++) //当pos不是首地址时,找到pos的位置
{
p = p->next; //使p指向下一个结点,直到第pos个结点为止
}
for(i=0;i<len;i++) //删除len个结点
{
q = p->next; //使q指向p的下一个结点
p->next = q->next; //将q的下一个结点的地址传给p的next
free(q); //释放q指向的结点
}
}
return head; //返回首地址
}
void freeall(TYM *head) //释放函数
{
TYM *p;
for(p=head;p!=NULL;) //释放结点直到所有结点被释放
{
p = head->next; //使p指向下一个结点
free(head); //释放当前结点
head = p; //使head指向下一个结点
}
if(p==NULL) //如果全部释放
printf("********* Free Success! *********\n");
}
int main()
{
TYM *head,*p,*q;
int i,pos;
head = p = (TYM *)malloc(sizeof(TYM)); //开辟一个新的空间
printf("*********************************\n");
printf("Please Input :\n");
scanf("%s%d",head->name,&head->num); //对新空间赋值
for(i=0;i<4;i++) //创建4个空间
{
q = (TYM*)calloc(1,sizeof(TYM)); //将开辟的空间的首地址赋给q
p->next = q; //将q的值传递给p的next成员
p = q; //使p指向q
scanf("%s%d",p->name,&p->num); //对新空间赋值
p->next = NULL; //使空间的next成员不指向任何方向
}
printf("************ Output *************\n");
for(p=head;p!=NULL;p=p->next) //输出链表
{
printf("%s\t%d\n",p->name,p->num); //输出当前变量的值
}
printf("DELETE......\n");
printf("******** Position & Lenth *******\n");
printf("Position:\t");
scanf("%d",&pos); //输入删除结点的地址
printf("Lenth:\t\t");
scanf("%d",&i); //输入删除结点的个数
head = del_node(head,pos,i);
printf("********** Output all ***********\n");
for(p=head;p!=NULL;p=p->next) //输出经删除后的链表
{
printf("%s\t%d\n",p->name,p->num); //输出当前变量的值
}
freeall(head); //释放链表
return 0;
}

****************************************调试窗口****************************************
|