#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);
}//为什么当第一个和第二个是一样的时候就会出错啊?还有第一跟第三同第二跟第四同的时候也出错?请帮忙看下?谢谢,谢谢,不知道哪错老????