题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题思路:依次从头结点开始检查相连的两个节点是否相等,若相等则进行删除操作,将前一个相等的节点删除,后一个节点作为删除节点,依次在向后比较,特别注意删除的节点是尾结点的情况
class Solution {
public:
ListNode * deleteDuplication(ListNode* pHead)
{
if (pHead == nullptr)
return nullptr;
ListNode* dummy = new ListNode(0);
ListNode* pre = dummy;
dummy->next = pHead;
while (pre->next != nullptr&&pre->next->next!=nullptr)
{
if (pre->next->val != pre->next->next->val)
{
pre = pre->next;
}
else
{
ListNode* pdelete = pre->next;
while (pdelete->next != nullptr&&pdelete->val == pdelete->next->val)
{
ListNode* pnext = pdelete->next;
delete pdelete;
pdelete = nullptr;
pdelete = pnext;
}
if (pdelete->next == nullptr)
{
delete pdelete;
pdelete = nullptr;
pre->next = nullptr;
}
else
{
pre->next = pdelete->next;
delete pdelete;
pdelete = nullptr;
}
}
}
return dummy->next;
}
};