56、删除链表中重复的结点

(个人水平有限,请见谅!)

题目描述:

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

代码示例:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead)
    {
        ListNode* p = pHead;
        map <int,int> mp;
        while (p != NULL)
        {
            mp[p->val]++;
            p = p->next;
        }
        
        while (pHead!=NULL && mp[pHead->val]>1)
            pHead = pHead->next;
        if (pHead == NULL) return pHead;
        
        ListNode* q = pHead;
        p = pHead->next;
        while (p != NULL)
        {
            if (mp[p->val]>1)
            {
                p = p->next;
                q->next = p;
            }else{
                q = q->next;
                p = p->next;
            }
        }
        return pHead;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_30534935/article/details/87906758