LeetCode 82. Remove Duplicates from Sorted List II 剔除链表中的重复节点 II

1.题目

给定已排序的链表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。

示例:

Input: 1->2->3->3->4->4->5
Output: 1->2->5

 

2.思路

新建链表头结点指针 dummy

如果当前节点cur的值与下一个节点的值相同,两个节点都需要被删除。
为了保证删除链表之后的链表仍然是相连的,当前节点的前一个节点pre 和后边比cur值大的节点相连。

3.实现

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head == nullptr || head->next == nullptr)
            return head;
        
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        
        ListNode* pre = dummy;
        ListNode* cur = head;

        
        while(cur != nullptr)
        {
            while(cur->next != nullptr && cur->val == cur->next->val)
                cur = cur->next;
            
            //这里的if else 是为了保证 pre 始终与下一个没有重复的节点连接在一起。
            if(pre->next == cur)
                pre = cur;
            else
                pre->next = cur->next;  
            
            cur = cur->next;
            
        }
        
        return dummy->next;
    }
};

 

猜你喜欢

转载自blog.csdn.net/u014128608/article/details/92800306