题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
分析:
常规方法删除
class Solution
{
public:
ListNode* deleteDuplication( ListNode* pHead )
{
if ( pHead == NULL )
return NULL;
ListNode* pPreNode = NULL;
ListNode* pNode = pHead;
ListNode* pResult = pHead;
while ( pNode != NULL )
{
ListNode* pNext = pNode->next;
bool needDelete = false;
if ( pNext != NULL && pNext->val == pNode->val )
needDelete = true;
if ( !needDelete )
{
pPreNode = pNode;
pNode = pNode->next;
}
else
{
int value = pNode->val;
ListNode* pToBeDel = pNode;
while ( pToBeDel != NULL && pToBeDel->val == value )
{
pNext = pToBeDel->next;
delete pToBeDel;
pToBeDel = NULL;
pToBeDel = pNext;
}
if ( pPreNode == NULL )
pResult = pNext;
else
pPreNode->next = pNext;
pNode = pNext;
}
}
return pResult;
}
};