/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* deleteDuplicates(struct ListNode* head ) {
    // write code here
    struct ListNode* node=head;
    struct ListNode* next=node->next;
    
    while(node){ //当node不是空的时候
        if(next){//如果next也不是空
            while(node->val==node->next->val){//如果当前节点的值等于下一个结点的值
                node->next=node->next->next;  //剔除下一个结点,直接链接当前结点到下一节点的下一节点
                if(node->next==NULL){         //如果下一个结点的下一个结点是空,直接跳出
                    break;
                }
            }
        }
        node=node->next; //处理完一个节点后,取下一个结点做当前节点
        if(node){        //如果node已经是空了,那么他就没有下一个结点,如果node不是空,才有下一个节点
            next=node->next;
        }
    }
    return head; //直接返回头结点,因为无论如何头结点都不会被删
}