1. 新建一个node,其next指向pHead
  2. 通过map记录所有值出现次数
  3. 在遍历node,help指针指向node的zuiho如果下一个值是从重复的直接删除节点,如果是唯一的指针后移
help指针帮助删除重复节点
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
  public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if (pHead == NULL) return pHead;
        unordered_map<int, int> toDel;            // 记录节点值数量
        ListNode* head = new ListNode(-1);
        head->next = pHead;
        while (pHead) {
            toDel[pHead->val]++;
            pHead = pHead->next;
        }
        ListNode* help = head;
        while (help->next) {
            if (toDel[help->next->val] > 1)     // 下个值重复跳过
                help->next = help->next->next;
            else                                // 下个值唯一加入链表指针后移
                help = help->next;
        }
        return head->next;
    }
};