/****************************************************************
該程序實現結點的刪除。
其中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;
}

****************************************調試窗口****************************************
|