题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
思路:
设置两个节点指针,一个pCur记录当前节点,一个pNext记录当前节点后面的一个节点(遇到重复节点才用到),如果当前节点pCur的值与pCur->next的值相等,继续看后面的节点是否还与pCur的值相等,若存在重复节点时,需要一个pNext的临时节点,利用这个节点调用后面的节点,看后面的节点的值是否与当前节点的值相等,直到找到不重复的节点为止,找到了则把第一个不重复的节点赋值给pCur,如此循环下去,就能处理成去除重复节点的结果,记住遇到重复节点的时候才用到pNext,否则不需要。
代码:
class solution
{
public:
ListNode* deleteDuplication(ListNode* pHead)
{
ListNode* pCur=pHead;
ListNode* pNext=NULL;
while(pCur!=NULL)
{
//result=temp->next;
if(pCur->next!=NULL&&pCur->value==pCur->next->value)
{
pNext=pCur->next;
/*在有重复节点后,寻找不重复的第一个节点*/
while(pCur->value==pNext->next->value)
{
pNext=pNext->next;
}
if(pCur==pHead)
{
pHead=pNext.next;
}
/*替换成找到的不重复的第一个节点*/
pCur=pNext->next;
}
else
{
pCur=pCur->next;
}
}
return pHead;
}
}