struct ListNode* deleteDuplication(struct ListNode* pHead ) {
    if(pHead==NULL){
        return NULL;
    }
    struct ListNode* pre=NULL;
    struct ListNode* node=pHead;
    struct ListNode* next=node->next;
    //当node不为空时进行循环
    while(node){
        //初始化一个flag用于标注当前节点是否需要删除
        int flag=0;
        //取出当前值
        int cur_val=node->val;
        //如果next已经空了,就没必要继续比较,直接跳出最外层while循环
        if(next==NULL){
            break;
        }
        //取出下一个节点的值
        int next_val=next->val;
        //如果下一个节点的值与当前节点相等,进行一下while循环
        while(cur_val==next_val){
            flag=1;//flag置为1
            node->next=next->next;//把当前节点的next指向下下个节点
            next=next->next;//把next指向next下一个节点
            //如果next已经空了,就不需要再比较值是否相等,跳出当前while循环
            if(!next){
                break;
            }
            //取出新next的值
            next_val=next->val;
        }
        //如果flag为1,说明需要删除当前节点
        if(flag==1){
            //如果当前节点是头节点,即pre是空
            if(pre==NULL){
                pHead=next;//头节点变成下一个节点
                node=pHead;//当前节点更新
                if(next){//当next不为空的时候才更新next
                    next=next->next;
                }
            }else{//如果pre不是空          
                pre->next=next;//跳过当前节点,pre的next直接指向next
                node=next;//当前节点换为next
                if(next){//当next不为空的时候才更新next
                    next=next->next;
                }
            }
        }else{//如果flag不是1,说明不需要删除当前节点
            pre=node;//正常迭代pre和node
            node=next;
            if(next){////当next不为空的时候才更新next
                next=next->next;
            }
        }
    }
    return pHead;
}