首页 > 试题广场 >

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

[编程题]删除有序链表中重复的元素-II
  • 热度指数:175652 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为, 返回.
给出的链表为, 返回.

数据范围:链表长度 ,链表中的值满足
要求:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
示例1

输入

{1,2,2}

输出

{1}
示例2

输入

{}

输出

{}

说明:本题目包含复杂数据结构ListNode,点此查看相关信息
头像 牛客题解官
发表于 2022-04-22 11:37:29
精华题解 题目的主要信息: 在一个非降序的链表中,存在重复的节点,删除该链表中重复的节点 重复的节点一个元素也不保留 举一反三: 学习完本题的思路你可以解决如下题目: BM15.删除有序链表中重复的元素-I 方法一:直接比较删除(推荐使用) 思路: 这是一个升序链表,重复的节点都连在一起,我们就可以很轻易 展开全文
头像 牛一霸
发表于 2021-07-09 21:05:10
精华题解 题目:删除有序链表中重复的元素 描述:给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。 例如:给出的链表为1→2→3→3→4→4→5,返回1→2→5。 给出的链表为1→1→1→2→3,返回2→3。 示例1:输入:{1,2,2},返回值:{1} 展开全文
头像 冰箱的主人LR
发表于 2021-07-06 23:11:07
精华题解 牛客NC24#删除有序链表中重复的元素-II# 题目链接 描述 给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→5, 返回1→2→5.给出的链表为1→1→1→2→3, 返回2→3. 题目很简单,因为给的是升序链表相同的 展开全文
头像 鸠摩罗什
发表于 2021-07-11 13:53:49
精华题解 描述        给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→5, 返回1→2→5.给出的链表为1→1→1→2→3, 返回2→3.示 展开全文
头像 蒙牛麦片
发表于 2021-07-16 17:29:47
精华题解 NC24 删除有序链表中重复的元素-II 题意分析: 给一个有序的链表,删除其中出现的重复元素 示例:链表1→2→3→3→4→4→5, 删除重复元素后,变为1→2→5。解释:在原有链表中,3和4出现了多次,因此把所有的3,4都删除,最后返回了1→2→5。 题解一(遍历): 在NC25中,我们删除了重 展开全文
头像 大菠萝侦探
发表于 2021-07-10 00:49:50
精华题解 描述 给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。首先提出这个题比较不严谨的地方,代码中一开始给出的注释中,结构体的定义是不严谨的,虽然注释中定义的结构体是下面的样子 /** * struct ListNode { * int val; * 展开全文
头像 下一次什么时候可以修改昵称
发表于 2020-10-20 10:20:00
算法 1.设置伪结点,方便处理 2.双指针prev和curr 3.当遇到当前节点值和下一节点值相等的节点时,进行while循环找到下一个不相等的节点,挂到prev节点上 4.当遇到当前节点值和下一节点值不相等的节点时,prev和curr都移动到下一个节点接着遍历就行 public ListNo 展开全文
头像 OfferCall!
发表于 2021-03-27 20:45:54
先定义一个头节点用于指示链表的头部位置,方便最后返回链表。然后定义两个指针p和q,初始化时,p先指向头结点,q指向head,开始遍历链表,因为链表是有序的,所以重复元素一定是连续出现的,所以我的策略就是先找出重复的一段子链表,然后一网打尽,具体做法就是: 如果q.next.val != q.v 展开全文
头像 子夜降晴空
发表于 2021-03-25 20:45:47
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { ListNode* res = new ListNode(0); //省去判断链表头重复的情况 res->next 展开全文
头像 牛客449560839号
发表于 2021-08-20 21:57:25
/** * 设置一个首节点,遍历扫描,并设置 * pre,cur,next三个指针 * * @param head * @return */ public static ListNode deleteDuplicates(ListN 展开全文
头像 牛客82035003号
发表于 2022-09-08 22:25:12
1.首先加上一个空的头结点,便于处理删除第一个结点的情况。 2.需要设一个pre指针跟踪工作结点及记录一路留下来的结点。 3.用2个指针p,q来比较结点值是否相同。 4.不同时,pre指向p,p指向q,q指向q->next。 5.相同时,继续看q的后面是否还有一样,直到 展开全文
头像 夏了南城
发表于 2020-08-23 15:48:12
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 展开全文
头像 七月牧夫
发表于 2022-03-06 16:22:29
import . "nc_tools" func deleteDuplicates( head *ListNode ) *ListNode { if head == nil { return nil } ret := &ListNode{Next: h 展开全文
头像 190409杨冬斌
发表于 2021-02-08 14:28:30
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @ 展开全文
头像 Fadeways
发表于 2021-10-07 23:20:18
/* * function ListNode(x){ * this.val = x; * this.next = null; * } */ /** * * @param head ListNode类 * @return ListNode类 */ functio 展开全文
头像 JZZZZZZZZZZZ
发表于 2020-12-20 23:04:45
遍历链表的时候保留两个指针,prev表示前一个节点,cur表示当前节点。prev的主要作用是在发现cur节点和后面有重复的时候断掉对cur的连接在去重的时候我先保留了第一个重复的节点,直到删干净后面的重复节点以后再删除第一个重复节点 function deleteDuplicates( head ) 展开全文

问题信息

难度:
367条回答 25381浏览

热门推荐

通过挑战的用户

查看代码