题目描述:
一个有序链表:1 → 3 → 4 → 4 → 5 → 6 → 6 → 8,删除有序链表后得到:1 → 3 → 4 → 5 → 6 → 8。请实现该功能,并返回链表的头指针。
思路分析:
1.设置3个工作指针,pre=L,cur=L->next,re=L,cur指向当前指针,pre指向当前节点的前继节点,re指向迭代过程中添加节点的位置。
2.迭代比较cur->data与cur->next->data,若相等,则令re=pre,pre=cur,pre指向有重复元素的第一个节点,然后cur=cur->next,迭代删除cur指向节点,直至cur->data!=pre->data,删除pre指向节点,re->next=cur,pre=re.
3.若不等,则re=re->next,pre=re,cur=pre->next.
4.直至cur->next==NULL
代码实现:
class Solution{
public:
LinkList *uniqueTwo(LinkList *L)
{
LinkList *re, *pre, *cur;
re = pre = L;
cur = L->next;
while (cur->next)
{
if (cur->data == cur->next->data)
{
pre = cur;//pre标记第一个重复节点
while (cur->data == pre->data)//依次删除后续重复节点
{
pre->next = cur->next;
cur = pre->next;
}
re->next = cur;//删除第一个重复节点
pre = re;
}
else
{
re = re->next;
pre = re;
cur = pre->next;
}
}
}
};