#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList L;//定义全局变量L, 可以省略参数传递;
LinkList Head_insert()
{
LNode *s;
int x;
L=(LinkList ) malloc(sizeof(LNode));
L->next=NULL;//开辟头节点
printf("请输入数据: \n");
scanf("%d",&x);
while(x != 999)
{
s=(LNode * ) malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
void print_List()
{
LinkList p;
p=L->next;
while( p )
{
printf("%5d",p->data);
p=p->next;
}
}
LinkList delete_x(int x)
{
LNode *p,*q;
LNode *pre;//pre永远为p节点的前驱;
p=L->next;
pre= L;
while( p )
{
if(p->data == x)
{
q=p; //q指向该节点
p=p->next; //p指针后移;
pre->next=p;//删除q节点;
free(q);//释放q内存
}else{ //如果p节点的值不等于被删值,则 p 和 pre 同时后移
pre=p;
p=p->next;
}
}
return L;
}
LinkList delete_List_a_b(int a,int b)
{
LNode *p,*q;
LNode *pre;//pre永远为p节点的前驱;
p=L->next;
pre= L;
while( p )
{
if(p->data > a && p->data < b)
{
q=p; //q指向该节点
p=p->next; //p指针后移;
pre->next=p;//删除q节点;
free(q);//释放q内存
}else{
pre=p;
p=p->next;
}
}
return L;
}
int main()
{
printf("Hello world!\n");
int x;
int a, b;
Head_insert();
printf("输出单链表: \n");
print_List();
printf("\n");
printf("请输入要删除的元素值: \n");
scanf("%d",&x);
delete_x(x);
printf("删除%d之后的单链表: \n",x);
print_List();
printf("\n");
printf("请输入上限和下限: \n");
scanf("%d %d",&a,&b);
delete_List_a_b(a,b);
printf("删除%d和%d之间元素之后的单链表: \n",a,b);
print_List();
printf("\n");
return 0;
}
