首页 > 其他 > 详细

2015 删掉绝对值相同节点

时间:2019-10-20 15:21:06      阅读:62      评论:0      收藏:0      [点我收藏+]

思想:以空间换时间,因为|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)

2015 删掉绝对值相同节点

原文:https://www.cnblogs.com/yangmenda/p/11707568.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!