删除链表中的重复结点

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define flag 0

typedef int DataType;

typedef struct Node

{

    DataType data;

    struct Node *next;

}LNode,*LinkList;

LinkList Creat_LinkList()//创建带头结点的链表(从尾部插入)

{

    LinkList L;

    LNode *s,*r;

    s=(LNode *)malloc(sizeof(LNode));

    s->next=NULL;

    r=L=s;

    int x;

    scanf("%d",&x);

    while(x!=flag)

    {

         s=(LNode *)malloc(sizeof(LNode));

         s->data=x;

         if(L->next==NULL)

              L->next=s;

         else

              r->next=s; 

         r=s;

         scanf("%d",&x);   

    }

    if(r)

       r->next=NULL;

    return L;

}

LinkList pur_LinkList(LinkList L)//删除重复结点的算法

{

    LNode *p,*q,*r;

    p=L->next;

    while(p)

    {

         q=p;

         while(q->next)

         {

             if(q->next->data==p->data)

             {

                 r=q->next;

                 q->next=r->next;

                 free(r);

             }

             else

                 q=q->next;

         }  

         p=p->next;

    }

    return L;

}

int main()

{

    LinkList H;

    H=Creat_LinkList();

    LNode *p;

    p=H->next;

    while(p)

    {

         printf(" %d",p->data);

         p=p->next;

    }

    printf("\n");

    LinkList S;

    S=pur_LinkList(H);

    LNode *q;

    q=S->next;

    while(q)

    {

         printf(" %d",q->data);

         q=q->next;

    }

    printf("\n");

    system("pause");

    return 0;

}



你可能感兴趣的:(链表)