struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        ListNode *dummy = new ListNode(-1);//创建一个虚拟头结点
        ListNode *pre = dummy, *cur = pHead;//pre->next保存没有重复的结点
        while(cur){
            //如果cur与下一个结点相同,就跳过相同节点(到连续相同的最后一位)
            if(cur->next && cur->val == cur->next->val){
                while(cur->next && cur->val == cur->next->val){
                    cur = cur->next;
                }
            //1. 如果cur的下一个结点为空直接保留; 2.如果cur与下一个结点不同就保存cur
            }else{
                pre->next = cur;
                pre = pre->next;
            }
            cur = cur->next;//cur跳到下一位(如果上一个是连续重复结点的最后一位,正好跳到下一个新的结点)
        }
        pre->next = nullptr;//此时cur为空,所以直接把pre的下一位置为空
        return dummy->next;
    }
};