该程序原理:
该程序的原理就是,通过比大小来确定是否删除结点
删除算法如图
该算法的代码如下:
struct LNode *b;
b=a;//* *a为原链表 *//
while(b->next)
{
if(!((b->next->data<maxk)&&(b->next->data>mink)))//*通过比大小确认是否删除该结点
{
struct LNode *c;
c=b->next;//*储存该结点
b->next=c->next;//*如上图所示
free(c);//*释放其内存
}
else
{
b=b->next;//*指向下一个结点
}
}
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#define mink 10
#define maxk 25
struct LNode
{
int data;
struct LNode *next;
};
struct LNode *a0()
{
struct LNode *a;
a=(struct LNode*)malloc(sizeof(struct LNode));
a->next=NULL;
}
struct LNode *a1()
{
struct LNode *a,*b;
a=a0();
b=a;
int c[]={1,3,6,10,13,16,17,18,20,24,25,26,27,30},d;
for(d=0;d<sizeof(c)/sizeof(int);d++)
{
struct LNode *e;
e=a0();
e->data=c[d];
b->next=e;
b=e;
}
return a;
}
struct LNode *a2(struct LNode *a)
{
struct LNode *b;
b=a;
while(b->next)
{
if(!((b->next->data<maxk)&&(b->next->data>mink)))
{
struct LNode *c;
c=b->next;
b->next=c->next;
free(c);
}
else
{
b=b->next;
}
}
return a;
}
main()
{
char aa[]="Math Dash的链表排除结点程序";
char bb[strlen(aa)+6];
sprintf(bb,"title %s",aa);
system(bb);
puts(aa);
struct LNode *a,*b;
a=a1();//*创建单链表
b=a->next;
printf("原链表\n");
while(b)
{
printf("%d\n",b->data);
b=b->next;
}
a=a2(&(*a));//*检查是否超出范围
b=a->next;
printf("更改后的链表\n");
while(b)
{
printf("%d\n",b->data);
b=b->next;
}
system("pause");
return 0;
}
程序运行结果如下:
|