主题:链表删除函数,执行不正确,老是不能完成
#include "stdlib.h"
#include "stdio.h"
#define A sizeof(struct st)
typedef struct st
{ int num;
struct st *next;
}dd;
dd *list()/* 建立一个链表*/
{ dd *h,*r,*s;
r=s=(dd *)malloc(A);
printf("inter the data :\n");
scanf("%d",&s->num);
h=s;
while(s->num!=0)
{ r->next=s;
r=s;
s=(dd *)malloc(A);
printf("inter:\n");
scanf("%d",&s->num);
}
r->next=NULL;
return h;
}
dd print(dd *head)/* 这是输出函数,*/
{ dd *p;
p=head;
if(head!=NULL)
do
{ printf("%3d",p->num);
p=p->next;
}while(p!=NULL);
}
dd del(dd *head)/* 这个是那个删除链表重复元素的函数*/
{
dd *p,*q,*r;/* *p用于列举链表的每个节点*/
p=head;
if(p==NULL)
printf("wrong !") ;
while(p!=NULL) /* **********修改了p->next*/
{ q=p;
{
if(q->next!=NULL&&q->next->num==p->num)/*用q来完成查找*/
{
r=q->next;
p->next=q->next; /* 修改了p->next=q->next->next*/
free(r);
}
else
{q=q->next;}
}
p=p->next;
}
}
main()
{ dd *p;
p=list();
print(p);
printf("\nkai shi shan chu chognfu mo kuai :\n");
del(p);
print(p);
getch();
}
/*出现老是输出零的原因,竟然是我没有加这个,include "stdlib.h"这个头问题,,晕死了
*/
但是,我检查了,理论上么有错误啊,但是,每当我输入一些相同的数的时候,却不能完成删除这些重复的数,而且吧,返回时还有0,要是顺序稍微一打乱了,入输入2 3 2 3 2 2 ,虽然调用了del函数但是输出还是原值,2 3 2 3 2 2 ,,请各位帮助一下,给个灵感,,,谢了,
#include "stdio.h"
#define A sizeof(struct st)
typedef struct st
{ int num;
struct st *next;
}dd;
dd *list()/* 建立一个链表*/
{ dd *h,*r,*s;
r=s=(dd *)malloc(A);
printf("inter the data :\n");
scanf("%d",&s->num);
h=s;
while(s->num!=0)
{ r->next=s;
r=s;
s=(dd *)malloc(A);
printf("inter:\n");
scanf("%d",&s->num);
}
r->next=NULL;
return h;
}
dd print(dd *head)/* 这是输出函数,*/
{ dd *p;
p=head;
if(head!=NULL)
do
{ printf("%3d",p->num);
p=p->next;
}while(p!=NULL);
}
dd del(dd *head)/* 这个是那个删除链表重复元素的函数*/
{
dd *p,*q,*r;/* *p用于列举链表的每个节点*/
p=head;
if(p==NULL)
printf("wrong !") ;
while(p!=NULL) /* **********修改了p->next*/
{ q=p;
{
if(q->next!=NULL&&q->next->num==p->num)/*用q来完成查找*/
{
r=q->next;
p->next=q->next; /* 修改了p->next=q->next->next*/
free(r);
}
else
{q=q->next;}
}
p=p->next;
}
}
main()
{ dd *p;
p=list();
print(p);
printf("\nkai shi shan chu chognfu mo kuai :\n");
del(p);
print(p);
getch();
}
/*出现老是输出零的原因,竟然是我没有加这个,include "stdlib.h"这个头问题,,晕死了
*/
但是,我检查了,理论上么有错误啊,但是,每当我输入一些相同的数的时候,却不能完成删除这些重复的数,而且吧,返回时还有0,要是顺序稍微一打乱了,入输入2 3 2 3 2 2 ,虽然调用了del函数但是输出还是原值,2 3 2 3 2 2 ,,请各位帮助一下,给个灵感,,,谢了,