从随机产生的无序链表去掉重复元素
去重的操作是遍历两遍链表进行去重,时间复杂度n²,不需要重新开辟空间
第一个循环用 指针p指向第一个元素并对链表的元素进行遍历,第二个循环用指针q指向p的下一个元素,并对p后面的元素进行遍历,并依次与p指向的元素进行比较,如果相同则删除q指向的元素。
# include<iostream>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}NODE,*PNODE;
PNODE create()
{
int x;
PNODE head=(PNODE)malloc(sizeof(NODE));
head->next=NULL;
PNODE tail=head;
cin>>x;
for(int i=0;i<x;i++)
{
int d=rand()%50;
PNODE pnew=(PNODE)malloc(sizeof(NODE));
pnew->data=d;
tail->next=pnew;
pnew->next=NULL;
tail=tail->next;
}
return head;
}
void traverse(PNODE p)
{
PNODE head=p;
while(p->next)
{
p=p->next;
cout<<p->data<<" ";
}
printf("\n");
}
PNODE delete2(PNODE head)
{
PNODE p=head->next;
while(p!=NULL)
{
PNODE q=p;
while(q->next!=NULL)
{
if(q->next->data==p->data)
{
q->next=q->next->next;
}
else
{
q=q->next;
}
}
p=p->next;
}
return head;
}
int main()
{
PNODE p=NULL;
p=create();
traverse(p);
PNODE q=delete2(p);
traverse(q);
return 0;
}