/**
* 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;
}