题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
重新设置一个头节点。
只能修改前一个节点指针的next,不能修改当前节点的指针。
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
/*
ListNode* currentNode = pHead;
while(currentNode)
{
while(currentNode ->next != NULL && currentNode ->next ->val == currentNode ->val)
{
currentNode ->next = currentNode ->next ->next;
}
currentNode = currentNode ->next;
}
return pHead;
*/
if(pHead == NULL || pHead ->next == NULL)
return pHead;
ListNode first = ListNode(-1);
first.next = pHead;
ListNode* currentNode = pHead;
ListNode* lastNode = &first;
while(currentNode && currentNode ->next)
{
if(currentNode ->val == currentNode ->next ->val)
{
ListNode* node = currentNode ->next;
while(node && node ->val == currentNode ->next ->val)
{
node = node ->next;
}
if(!node)
{
lastNode ->next = NULL;
break;
}
else
{
lastNode ->next = node;
currentNode = node;
}
}
else
{
lastNode = lastNode ->next;
currentNode = currentNode ->next;
}
}
return first.next;
}
};