题解 | #删除有序链表中重复的元素-II#

删除有序链表中重复的元素-II

http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode* newhead = new ListNode(0);//设置一个初始链表
        newhead->next = head;//将head链表添加到newhead中
        ListNode* pre = newhead;
        ListNode* curr = head;
        int count=0;
        while(curr!=nullptr&&curr->next!=nullptr){
            if(curr->val == curr->next->val){//第一部分,开始删除中间重复元素aaaabbbc变成了abbbc
                curr->next = curr->next->next;//curr指针就是判断相邻元素是否重复的
                count++;//count是用来记录curr的相邻元素是否重复,重复的话,pre本身可不能更新哦,防止aaabb出现
            }
            else{
                if(count>0){//如果经历了重复元素,那么不管这些,直接跳下去,指向bbbc,之后发现还是重复,指向为c
                    pre->next = curr->next;
                    count = 0;
                }
                else{//只有在count为0而且相邻元素不重复的情况下,pre才走到curr的位置上
                    pre=curr;
                }
                curr = curr->next;//判断完毕,前进一位
            }
        }
        if(count>0){//带上最后的nullptr
            pre->next = curr->next;
        }
        return newhead->next;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务