【笔试题】删除有序链表中的重复节点

题目描述:

一个有序链表: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;
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37925202/article/details/81365713