删除链表中结点相同的结点,相同结点保留一个
#define OK 1#define ERROR 2
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
#include"stdio.h"
#include"stdlib.h"
Status InitList(LinkList *M)//初始化,给头指针分配空间,并将头指针的指针域置为NULL(头指针也相当于一个结点,只是没有数据域)
{
LinkList p;
p=(LinkList)malloc(sizeof(LNode));
if(p==NULL)
return ERROR;
p->next=NULL;
*M=p;
return OK;
}
void GreateList(LinkList *M)//给链表赋值
{
LinkList p,q;
int i,n;
printf("输入链表的结点个数:");
scanf("%d",&n);
p=*M;
if(p!=NULL)
{
for(i=n;i>0;i--)
{
q=(LinkList)malloc(sizeof(LNode));
printf("输入第%d个数:",i);
scanf("%d",&q->data);
q->next=p->next;
p->next=q;
}
}
}
void OutputList(LinkList M)//输出链表
{
LinkList p;
p=M->next;//p指向第一个结点;(*p).data=p->data,都是指向第一个结点的数据域的
if(M!=NULL)
{
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
printf("\n");
}
void Delet(LinkList M)
{
LinkList p,q,t,r;
for(p=M->next;p->next!=NULL;p=p->next)
{
for(q=p->next,t=p;q!=NULL;)
{
if(p->data!=q->data)
{
t=q;
q=q->next;
}
else
{
r=q->next;
free(q);
t->next=r;
q=r;
}
}
}
}
void main()
{
LinkList L;
InitList(&L);
GreateList(&L);
OutputList(L);
Delet(L);
OutputList(L);
}//为什么当第一个和第二个是一样的时候就会出错啊?还有第一跟第三同第二跟第四同的时候也出错?请帮忙看下?谢谢,谢谢,不知道哪错老????