题目:
请自己构造一个简单的有序单链表,然后实现删除链表中的重复结点。例如:
思路:
新建一个头结点,以防第一个结点被删除。
保存当前结点的上一个结点,循环遍历整个链表,如果当前结点的值与下一个
结点的值相等,则将当前结点的值与下一个结点的下一个结点的值比较,直到
不相等或者为NULL为止,最后将当前结点的上一个结点的pre指向比较不相等的结点。如果当前结点与next结点不相等,将指针都向后移一位。
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead == NULL)
return pHead;
ListNode* pNewNode = new ListNode(0);
ListNode* pTemp = pNewNode;
ListNode* pCur = pHead;
while (pCur)
{
//下一个结点存在,并且与当前结点的值相等
if (pCur->next != NULL&&pCur->val == pCur->next->val)
{
ListNode* pNext = pCur->next;
while (pNext->next != NULL&&pNext->val == pNext->next->val)
pNext = pNext->next;//如果有重复元素,就一直往后找,直到找到不相等的元素
pCur = pNext->next;
}
//没有重复结点
else
{
pTemp->next = pCur;
pTemp = pTemp->next;
pCur = pCur->next;
}
}
//pTemp走到最后一个元素
pTemp->next = NULL;
return pNewNode->next;//去除我们为了方便加上去的头结点
}
};