时间复杂度O(m) 空间复杂度O(n)
其中数组的最大值 |data|<n
注:若不给最大值可以求链表最大值与最小值想减进行映射
算法思想:使用辅助数组来记录链表中结点出现的次数,若出现两次以上则删除该链表
void Del_value(LinkList &A,int n){
if(A->next==NULL)
return;
int *B=(int *)malloc(sizeof(int)*(n+1)); //动态分配数组空间避免n过大栈无法分配对应空间
LinkList cur;
LinkList pre=A;
cur=pre->next;
for(int i=0;i<n+1;i++){ //初始化数组
B[i]=0;
}
while(cur){
if(cur->data>0){
if(B[cur->data]==0){
pre=pre->next;
B[cur->data]++;
}else{
pre->next=cur->next; //出现多次则删除
free(cur);
}
}else{
if(B[-(cur->data)]==0){
pre=pre->next;
B[-(cur->data)]++;
}else{
pre->next=cur->next;
free(cur);
}
}
cur=pre->next;
}
}