#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;
}

posted on 2011-05-09 16:50  枫叶飘泪  阅读(6156)  评论(0编辑  收藏  举报