题目:
在排序链表中,删除重复的结点。
struct ListNode
{
int data;
ListNode *next;
};
void deleteDuplication(ListNode **head)
{
if (head == NULL || *head == NULL)
return;
ListNode *preNode = NULL;
ListNode *pNode = *head;
while (pNode != NULL)
{
ListNode *pNext = pNode->next;
bool needDelete = false;
if (pNext != NULL&&pNext->data == pNode->data)
needDelete = true;
if (!needDelete)
{
preNode = pNode;
pNode = pNode->next;
}
else
{
int Data = pNode->data;
ListNode *toBeDelete = pNode;
while (toBeDelete != NULL&&toBeDelete->data == Data)
{
pNext = toBeDelete->next;
delete toBeDelete;
toBeDelete = NULL;
toBeDelete = pNext;
}
if (preNode == NULL)
*head = pNext;
else
{
preNode->next = pNext;
}
pNode = pNext;
}
}
}