求单链表中删除除第一个元素外的重复元素的程序
#include <stdio.h>#include <stdlib.h>
#define ok 1
typedef int elemtype;
typedef int status;
typedef struct nodes
{
elemtype data;
struct nodes *next;
}Lnodes,*Linklist;
status creatlinklist(Linklist &L,int n);
status deletesamedata(Linklist &L);
void traverselist(Linklist L);
void main()
{
Linklist L;
int n;
printf("请输入单链表中的数据个数:\n");
scanf("%d",&n);
creatlinklist(L,n);
traverselist(L);
deletesamedata(L);
traverselist(L);
}
status creatlinklist(Linklist &L,int n)
{
Linklist head,p;
int i;
L=(Linklist)malloc(sizeof(Lnodes));
L->next=NULL;
head=L;
printf("请输入初始值:\n");
for(i=1;i<=n;i++)
{
p=(Linklist)malloc(sizeof(Lnodes));
scanf("%d",&p->data);
p->next=head->next;
head->next=p;
}
return ok;
}
void traverselist(Linklist L)
{
Linklist p;
p=L->next;
while(p!=NULL)
{
printf("%2d\n",p->data);
p=p->next;
}
}
status deletesamedata(Linklist &L)
{
Linklist p,q,r;
Linklist head;
head=L;
p=head->next;
while(p)
{
q=p->next;
while(q)
{
if(p->data!=q->data)
q=q->next;
else
{
r=q;
q=q->next;
printf("删除的元素为%d\n",p->data);
free(r);
}
}
p=p->next;
}
return ok;
}
我写的程序如上,但不能正确的执行,求高手指教、、、