2015 删掉绝对值相同节点
思想:以空间换时间,因为|data|<=n,故辅助数组长度为n+1,各元素初值为0,依次扫描链表中各节点,同时检查q[|data|]的值如果为0,则保留该节点,幷使数值为1,否则,删除该节点。
代码:
void func(PNODE h,int n)
{
PNODE p,h,r;
int *q,m;
q=(int *)malloc(sizeof(int)*n+1);
for(int i=0;i<n+1;++i)
*(q+i)=0;
while(p->next!=NULL)
{
m=p->next->data>0?p->next->data:-p->next->data;
if(*(q+m)==0)//首次出现
{
*(q+m)=1;
p=p->next;
}
else{ //重复出现则删除
r=p->next;
p->next=r->next;
free(r);
}
}
free(q);
}
时间O(1),空间O(n)

浙公网安备 33010602011771号