单一链表删除相同元素
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int Data;
struct Node *next;
}LNode,*PLNode;
void CreateLink(PLNode *L,int n)
{
int i;
*L=(PLNode)malloc(sizeof(LNode)); //创立空间很重要
PLNode p=*L;
p->next=NULL;
PLNode s;
for(i=0;i<n;i++)
{
s=(PLNode)malloc(sizeof(LNode));
scanf("%d",&(s->Data));
p->next=s;
p=s;
}
p->next=NULL;
return ;
}
void Del(PLNode L1) //头指针方便了链表的操作 用头的next表示下一元素,而不是取当前的data
{
PLNode p,q; //这些点都是指针变量
p=L1;
while(p->next!=NULL)
{
q=p->next;
while(q->next!=NULL)
{
if(p->next->Data==q->next->Data)
{
q->next=q->next->next;
}
else
q=q->next;
}
p=p->next;
}
}
void Print(PLNode L1)
{
PLNode head=L1;
while(head->next)
{
if(head->next->next==NULL)
printf("%d\n",head->next->Data);
else
printf("%d ",head->next->Data); //链表最后不输空格的方法
head=head->next;
}
}
int main()
{
PLNode L;
int n;
scanf("%d",&n);
CreateLink(&L,n);
Del(L);
Print(L);
return 0;
}