/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        //空链表
        if(head == NULL) 
            return NULL;
        ListNode* res = new ListNode(0);
        //在链表前加一个表头
        res->next = head; 
        ListNode* cur = res;
        while(cur->next != NULL && cur->next->next != NULL){ 
            //遇到相邻两个节点值相同
            if(cur->next->val == cur->next->next->val){ 
                int temp = cur->next->val;
                //将所有相同的都跳过
                while (cur->next != NULL && cur->next->val == temp) 
                    cur->next = cur->next->next;
            }
            else 
                cur = cur->next;
        }
        //返回时去掉表头
        return res->next; 
    }
};


// class Solution {
// public:
//     /**
//      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
//      *
//      * 
//      * @param head ListNode类 
//      * @return ListNode类
//      */
//     ListNode* deleteDuplicates(ListNode* head) {
//         // write code here
//         // 利用map
//         map<int,int> m;
//         while(head)
//         {
//             ++m[head->val];
//             head = head->next;
//         }

//         ListNode* ans  = new ListNode(-1);
//         ListNode* temp = ans;
//         for(auto it=m.begin(); it!=m.end(); ++it)
//         {
//             // cout << it->first <<", " << it->second << endl;
//             if(it->second==1)
//             {
//                 ListNode* next = new ListNode(it->first);
//                 temp->next = next;
//                 temp = temp->next;
//             }
//         }

//         return ans->next;
//     }
// };