/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* deleteDuplicates(struct ListNode* head ) {
    // write code here
    if(head==NULL||head->next==NULL){
        return head;
    }//如果不存在head或者只有一个节点,直接返回
    typedef struct ListNode Node;
    Node* pHead=(Node*)malloc(sizeof(Node));
    pHead->next=head;//新建空指针,用来最终的返回
    Node* cur=head;//目前指针所在的位置
    Node* prev=pHead;//空指针
    Node* next=head->next;//下一指针的位置
    while(cur&&cur->next){//cur和next都存在
        if(cur->val==next->val){//两个相等
            while(next->next->val==next->val&&next->next!=NULL){
                next=next->next;//直接跳过
            }
            if(next->next==NULL){
                prev->next=NULL;
                return pHead->next;
            }
            cur=next->next;
            prev->next=cur;
            next=cur->next;//跳过两个相同数值之间所有节点
        }else{
            prev=cur;
            cur=next;
            next=next->next;//向后延申
        }
    }
    return pHead->next;
}