思路:和之前删除排序链表中重复元素I有区别,要求全部删除掉。要准备三个指针 pre cur next 在头结点创造一个哑节点
pre用来连接链表
cur用来指向当前结点
next指向下一个结点用来和cur比较
注:要考虑多个结点元素连续相等的情况,定义bool类型变量用来进行条件判断(bool类型可以随时随地在程序中修改)
class Solution
{
public:
ListNode* deleteDuplicates(ListNode* head)
{
if(!head||!head->next) return head;
ListNode* dummy=new ListNode(-1,nullptr);
dummy->next=head;
ListNode* pre=dummy;
ListNode* cur=head;
ListNode* nex=head->next;
bool isequal=false;
while(nex)
{
while(nex&&cur->val==nex->val) //用来解决多个元素连续相等,一直到相等的最后一个
{
cur=nex;
nex=nex->next;
isequal=true;
}
if(isequal)
{
cur=nex;
pre->next=cur;
if(!cur) break;
nex=cur->next;
isequal=false;
}
else
{
pre=cur;
cur=nex;
nex=nex->next;
}
}
return dummy->next;
}
};
问题:C++会造成内存泄漏,去掉的指针应该delete掉