思路
该题要求时间复杂度尽可能高效,因此牺牲空间换时间。设置辅助数组q[n+1],初始化为0.遍历单链表,如果出现数字a,则给q[a]赋值为1;若a重复出现,则删除此结点。
代码
void del_same(LinkList &head,int n){
LNode *p=head->next,*pre=head;
if(p==NULL) return;
int arr[n+1],m;
//初始化辅助数组
for(int i=0;i<arr.length;i++) arr[i]=0;
while(p!=NULL){
m=p->data>=0?p->data:-p->data;
if(arr[p->data]==0){ //没出现过
arr[p->data]=1;
pre=p;
p=p->next;
}else{ //出现过了
pre->next=p->next;
free(p);p=pre->next;
}
}
}