#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*Linklist;
void Init_Linklist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(LNode));
assert(*L != NULL);
(*L)->next=NULL;
}
void Create_Linklist(Linklist *L)
{
int n;
LNode *p,*q;
p = *L;
printf("链表的长度:");
scanf("%d",&n);
printf("输入链表元素:\n");
for(int i=0;i<n;i++)
{
q=(Linklist)malloc(sizeof(LNode));
assert( q != NULL);
scanf("%d",&q->data);
p->next=q;
p=q;
}
p->next=NULL;
}
void DeleteSame(Linklist *L)
{
LNode *p,*q,*s;
p = (*L)->next;
for(p;p!=NULL;p=p->next)
{
s=p; //s指向要删除结点的前驱
for(q=p->next;q!=NULL; )
{
if(q->data==p->data)
{
s->next=q->next;
free(q);
q=s->next;
}
else
{
s=q;
q=q->next;
}
}
}
}
void Print_Linklist(Linklist *L)
{
LNode *p;
p = *L;
while(p->next)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
}
int main()
{
Linklist L;
Init_Linklist(&L);
Create_Linklist(&L);
printf("初始化链表为:\n");
Print_Linklist(&L);
DeleteSame(&L);
printf("删除后链表为:\n");
Print_Linklist(&L);
return 0;
}