题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead == nullptr)
return nullptr;
ListNode *preNode = nullptr;
ListNode *node = pHead;
while (node != nullptr)
{
if (node->next != nullptr && node->val == node->next->val)
{
int value = node->val;
while (node->next != nullptr && node->next->val == value)
{
node = node->next;
}
if (preNode == nullptr)
{
pHead = node->next;
}
else
{
preNode->next = node->next;
}
}
else
{
preNode = node;
}
node = node->next;
}
return pHead;
}
};