题解 | #删除链表中重复的结点#

删除链表中重复的结点

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

class Solution {
public:
    ListNode* deleteDuplication(ListNode* pHead) {
        ListNode* dummy = new ListNode(-1);
        dummy->next = pHead;
        ListNode* prev = dummy;
        ListNode* slow;
        ListNode* fast = pHead;
        while (fast) {
            while (fast->next && (fast->val != fast->next->val)) {
                prev = fast;
                fast = fast->next;
            } 
            //出循环,此时fast在重复的第一个节点,或者单的最后一个节点
            slow = prev;
            //让fast找到最后一个重复的节点
            while (fast->next && (fast->val == fast->next->val)) {
                fast = fast->next;
            }
            if (slow->next == fast) {  //说明fast没有走动——>最后一个节点是单的,予以保留
                break;  //没有这个条件的话会出现无重复节点链表缺少了最后一个节点的情况
            }
            slow->next = fast->next;
            fast = slow->next;
        }
        return dummy->next;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务