题目描述

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

示例

在这里插入图片描述
在这里插入图片描述

源代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(!head) return head;
        ListNode *ans=new ListNode(0,head);
        ListNode *p=ans;
        while(p->next && p->next->next)
        {
            if(p->next->val == p->next->next->val)
            {
                int temp=p->next->val;
                while(p->next && p->next->val == temp)
                {
                    p->next=p->next->next;
                }
            }
            else p=p->next;
        }
        return ans->next;
    }
};

复杂度分析:

  • 时间复杂度:O(n),其中 n 是链表的长度。

  • 空间复杂度:O(1)。

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐