删除一个有序单链表中的重复节点
OJ地址:删除一个有序单链表中的重复节点
ListNode* deleteDuplication(ListNode* pHead)
{
if(pHead == nullptr)
return nullptr;
ListNode *n1, *n2, *n3;
n1 = nullptr;
n2 = pHead;
n3 = n2->next;
while(n3)
{
//如果相邻节点不相同,则不需要删除,更新节点,继续向后遍历
if(n2->val != n3->val)
{
n1 = n2;
n2 = n3;
if(n3)
n3 = n3->next;
}
else
{
//如果相邻节点相同
//则n3去找第一个不相同的节点
while(n3 && n2->val == n3->val)
{
n3 = n3->next;
}
//重新链接,如果要删除的包括头节点,则更新头节点
if(n1)
{
n1->next = n3;
}
else
{
pHead = n3;
}
//循环删除节点删除
while(n2 != n3)
{
ListNode *next = n2->next;
delete n2;
n2 = next;
}
//更新节点
n2 = n3;
if(n3)
n3 = n3->next;
}
}
return pHead;
}