双指针法,前后指针,并引入了虚拟头结点。首先根据pre和cur判断是否有重复结点,然后据此调整链接关系。这种方法并没有删除结点,会造成内存泄漏。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
ListNode* dummy_head=new ListNode{10001};
dummy_head->next=head;
ListNode* pre=dummy_head;
ListNode* cur=head;
while(cur && cur->next){
bool flag=false;
while(cur->next && cur->next->val == pre->next->val){
flag=true;
cur=cur->next;
}
if(flag) pre->next=cur->next;
else pre=cur;
cur=cur->next;
}
return dummy_head->next;
}
};