该程序的原理就是,判断该结点的值是否为特定值(item),如果是,则删除该结点
删除算法如图
算法代码如下:
void chan_chu_item_datas(struct LNode *a)
{
struct LNode *b;
b=a;
while(b->next)
{
if(b->next->data==item)//*判断是否为特定值,如果是,则删除
{
struct LNode *c;
c=b->next;
b->next=c->next;
free(c);
}
else
{
b=b->next;//*指向下一个结点
}
}
}
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#define item 4
struct LNode
{
int data;
struct LNode *next;
};
struct LNode *a0()
{
struct LNode *a;
a=(struct LNode*)malloc(sizeof(struct LNode));
a->next=NULL;
return a;
}
struct LNode *a1()
{
struct LNode *a,*b;
a=a0();
b=a;
int c[]={1,2,4,4,4,4,5,6,7,8,9},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;
}
void chan_chu_item_datas(struct LNode *a)
{
struct LNode *b;
b=a;
while(b->next)
{
if(b->next->data==item)//*判断是否为特定值,如果是,则删除
{
struct LNode *c;
c=b->next;
b->next=c->next;
free(c);
}
else
{
b=b->next;//*指向下一个结点
}
}
}
void Windows_system()
{
char aa[]="Math Dash的删除链表中删除值为特定值的结点";
char ab[strlen(aa)+6];
sprintf(ab,"title %s",aa);
system(ab);
puts(aa);
puts("这是原链表");
struct LNode *a,*b;
a=a1();
b=a->next;
while(b)
{
printf("%d\n",b->data);
b=b->next;
}
chan_chu_item_datas(&(*a));
b=a->next;
printf("链表中要去除的结点的值为%d\n去除值为%d之后的链表为:\n",item,item);
while(b)
{
printf("%d\n",b->data);
b=b->next;
}
}
main()
{
Windows_system();
system("pause");
return 0;
}
程序运行结果如下: