主题:关于链表的问题!
程序实现的功能是:将链表中的所有在info字段中包含值x的结点删除。
对3 5 3 4 5 进行测试,当删除5的时候正确,但是当删除3的时候错误。请各位指教。
我是知道问题出在那里,但是就是改不出来。郁闷ing.
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define NULL 0
struct node
{
int info;
struct node *next;
};
int n;//纪录结点个数
struct node *creat();
void print(struct node *head);
void removex(struct node *head,int x);
void main()
{
struct node *head;
int remove;
head=creat();//创建链表
print(head);//终端输出链表
scanf("%d",&remove);
removex(head,remove);//清除值为remove的结点
print(head);
}
struct node *creat()
{
struct node *p1,*p2;
struct node *head;
n=0;
head=NULL;
p1=p2=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->info);
while(p1->info!=NULL)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->info);
}
p2->next=NULL;
return head;
}
void print(struct node *head)
{
struct node *p;
p=head;
if(p==NULL)
{
printf("the list is empty\n");
//exit(1);
}
else
{
do
{
printf("%d\n",p->info);
p=p->next;
}while(p!=NULL);
}
}
void removex(struct node *head,int x)
{
struct node *p1,*p2;
p1=head;
for(;p1!=NULL;p1=p1->next)
{
if(p1->info==x)
{
if(p1==head)
{
head=p1->next;
p1=head;
}
else if(p1->next==NULL)
p2->next=NULL;
else
{
p2->next=p1->next;
p1=p2;
}
}
p2=p1;
}
}
对3 5 3 4 5 进行测试,当删除5的时候正确,但是当删除3的时候错误。请各位指教。
我是知道问题出在那里,但是就是改不出来。郁闷ing.
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#define NULL 0
struct node
{
int info;
struct node *next;
};
int n;//纪录结点个数
struct node *creat();
void print(struct node *head);
void removex(struct node *head,int x);
void main()
{
struct node *head;
int remove;
head=creat();//创建链表
print(head);//终端输出链表
scanf("%d",&remove);
removex(head,remove);//清除值为remove的结点
print(head);
}
struct node *creat()
{
struct node *p1,*p2;
struct node *head;
n=0;
head=NULL;
p1=p2=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->info);
while(p1->info!=NULL)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct node *)malloc(sizeof(struct node));
scanf("%d",&p1->info);
}
p2->next=NULL;
return head;
}
void print(struct node *head)
{
struct node *p;
p=head;
if(p==NULL)
{
printf("the list is empty\n");
//exit(1);
}
else
{
do
{
printf("%d\n",p->info);
p=p->next;
}while(p!=NULL);
}
}
void removex(struct node *head,int x)
{
struct node *p1,*p2;
p1=head;
for(;p1!=NULL;p1=p1->next)
{
if(p1->info==x)
{
if(p1==head)
{
head=p1->next;
p1=head;
}
else if(p1->next==NULL)
p2->next=NULL;
else
{
p2->next=p1->next;
p1=p2;
}
}
p2=p1;
}
}