leetcode_82. 删除排序链表中的重复元素 II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

输入: 1->1->1->2->3
输出: 2->3

解析:本题比较简单,如果没有空间要求,可以使用hashmap记录每个数字出现的次数,然后再构造一条新链表返回。
如果限定不能使用额外空间,只能使用常数空间,则需要在原链表上进行修改。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==NULL||head->next==NULL)
            return head;
        ListNode* output=new ListNode(-1);
        ListNode* q=output;
        ListNode* p=head;
        while(p!=NULL)
        {	//如果节点出现重复
            if(p->next!=nullptr && p->val==p->next->val){
               ListNode* tmp=p;
               //跳过该数字直到下一个数字或者nullptr
                while(tmp!=NULL&&tmp->val==p->val)
                {
                    tmp=tmp->next;
                }
                p=tmp; 
            } //不重复直接相连
            else{
                q->next=p;
                q=q->next;
                p=p->next;
            }
        } //类似1,2,2,3,3的情况,需要将返回的最后一个节点断掉
        q->next=nullptr;
        return output->next;
    }
};
发布了112 篇原创文章 · 获赞 0 · 访问量 369

猜你喜欢

转载自blog.csdn.net/qq_37292201/article/details/103885162
今日推荐