您的位置:首页 > 其它

给定一个排序链表,删除所有重复的元素每个元素只留下一个。

2017-03-29 19:50 796 查看
问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。

          样例:

               给出 
1->1->2->null
,返回 
1->2->null。

               给出 
1->1->2->3->3->null
,返回 
1->2->3->null。

解题思路:定义俩个标记数组,初始化两个数组为0,若链表中出现一个元素,用标记数组的下标标记该元素在

链表中出现了几次,若其下标为1,
则该元素只出现了一次,将该元素添加到新的链表中,若下标不为1,则出
现重复,不将该元素添加到新链表中。
实验代码:

class Solution {

public:

    /**

     * @param head: The first node of linked list.

     * @return: head node

    */

    ListNode *deleteDuplicates(ListNode *head) {

        // write your code here

        int xing[1000005],jiu[1000005];

        memset(xing,0,sizeof(xing));

        memset(jiu,0,sizeof(jiu));

        ListNode *q,*p;

        p= new ListNode;

        q=p;

        int j=0;

        while(head!=NULL)

        {

            int k;

            k=0;

            if(head->val>=0)

        {

            xing[head->val]++;k=1;

            

        }

             else 

        {

                 

            jiu[-(head->val)]++;k=-1;

                 

        }

        if(k==1&&xing[head->val]==1)

        {  

            p->next=head;

            p=head;

        }

        if(k==-1&&jiu[-(head->val)]==1)

        {   

            p->next=head;

            p=head;

        }

         

       

         head=head->next;

        }

        if(p!=NULL)

        p->next=NULL;

        if(q==NULL)

        return q;

        else

        return q->next;

    }

};

个人感想:链表中元素可能为正也可能为负,需要两个标记数组分别记录正数和负数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐