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