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


方法一:
unordered_map计数
思路:
        遍历链表,统计各值出现的次数。
        再遍历链表,判断并将计数为1的节点加入新链表。
       返回新链表。

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if(pHead==nullptr)
            return nullptr;
        unordered_map<int,int> mp;//计数数组
        for(ListNode* p=pHead;p!=nullptr;p=p->next){//遍历计数
            mp[p->val]++;
        }
        ListNode* head=nullptr;//新建头指针
        ListNode* p;
        for(ListNode* p1=pHead;p1!=nullptr;p1=p1->next){
            if(mp[p1->val]==1){//计数为1的节点加入链表
                ListNode* q=new ListNode(p1->val);
                if(head==nullptr){//插入新节点
                    head=q;
                    p=q;
                }else{
                    p->next=q;
                    p=q;
                }
            }
        }
        return head;
    }
};


时间复杂度:
空间复杂度:

方法二:
直接原地操作