首页 > 其他分享 >面试题 02.01. 移除重复节点

面试题 02.01. 移除重复节点

时间:2023-07-13 20:37:12浏览次数:41  
标签:面试题 set ListNode cur val 02.01 head next 移除

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例1:

输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:

输入:[1, 1, 1, 1, 2]
输出:[1, 2]
提示:

链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。
进阶:

如果不得使用临时缓冲区,该怎么解决?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicate-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

头尾指针法

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        //头尾指针法
        HashSet<Integer> map = new HashSet<>();
        ListNode pre = null, cur = head;
        while(cur!=null){
            //如果存在,则改变尾连接达到删除节点目的
            if(map.contains(cur.val)){
                pre.next = cur.next;
            }
            //如果不存在,则添加数值进set中
            else{
                map.add(cur.val);
                pre = cur;
            }
            cur = cur.next;
        }
        return head;
    }
}

递归方法

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        //递归方法
        HashSet<Integer> set = new HashSet<>();
        //排除特殊情况
        if(head==null) return head;
        set.add(head.val);
        removeNodes(head,set);
        return head;
    }
    public void removeNodes(ListNode head,HashSet set){
        if(head.next==null)return;
        if(set.contains(head.next.val)){
            head.next = head.next.next;
            //递归下去找到没有重复的数字
            removeNodes(head,set);
        }else{
            //添加下一节点set中没有的数字
            set.add(head.next.val);
            removeNodes(head.next,set);
        }
    }
}

标签:面试题,set,ListNode,cur,val,02.01,head,next,移除
From: https://www.cnblogs.com/xiaochaofang/p/17552039.html

相关文章

  • 这还不冲?Github上的大佬总结的2023经典大厂面试题,全会拿35k
    前言2023的上半年已经结束了,但是我发现有很多朋友没能拿到自己心仪的offer,其实并不是自身能力差,而且没有充足的准备面试。耗时一个月,收集了全网最热门的大厂面试题,我们程序员与别的行业不一样,除了上学的时候要做题,我们上班了找工作还得做题!我分享的结合目前互联网公司常见的面试考......
  • Redis面试题
    1.什么是Redis,Redis的优缺点?Redis本质上是一个key-value类型的内存的数据库,很像memcached,整个数据库统统加载在内存当中就行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。优点:因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能快......
  • net面试题
    1.什么是扩展方法扩展方法使你能够向现有类型"添加"方法,无需修改类型。条件:按扩展方法必须满足的条件,1必须是静态类中的静态方法,2.第一个参数类型是要扩展的类型,并且需要添加this关键字以表示其扩展方法。2.const和readonly的区别都标识一个常量。区别:初始化位置不同,con......
  • Java面试题全集(一)
    JDK、JRE、JVM之间的区别JDK(JavaSEDevelopmentKit),Java标准开发包,它提供了编译、运⾏Java程序所需的各种⼯具和资源,包括Java编译器、Java运⾏时环境,以及常⽤的Java类库等JRE(JavaRuntimeEnvironment),Java运⾏环境,⽤于运⾏Java的字节码⽂件。JRE中包括了JVM以及JVM⼯作......
  • 说透MySQL:从数据结构到性能优化,附实际案例和面试题
    typora-copy-images-to:imgmysql索引第一章MySQL性能(掌握)1分析-数据库查询效率低下我们进入公司进行项目开发往往关注的是业务需求和功能的实现,但是随着项目运行的时间增加,数据量也就增加了,这时会影响到我们数据库的查询性能。所以我们要提高操作数据库的性能,有如下两种方式:1.......
  • 【网络面试题】你知道 TCP 和 UDP 区别吗?
    ......
  • 2023上半年Android高频面试题汇总(大厂真题+答案解析)
    前言小伙伴们大家好哇,不知道你们在找工作的时候是不是在力扣、在牛客网狂刷真题!可是有时候刷题的数量连起来可以绕地球三圈,但是面试却过不了第三轮!有没有一种可能就是你没有把握住重点!想想我们之前考试是不是老师划了重点,给了往期真题你考得分数高?题海战术是保底策略,能保证你大概率......
  • 前端面试题-js(三)
    1.JavaScript中的对象JavaScript中有八种数据类型。有七种原始类型,因为它们的值只包含一种东西(字符串,数字或者其他)。相反,对象则用来存储键值对和更复杂的实体。对象是具有一些特殊特性的关联数组。它们存储属性(键值对),其中:属性的键必须是字符串或者symbol(通常是字符串)。值......
  • 大数据面试题集锦-Hadoop面试题(四)-YARN
    你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案。如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料。目录1、为什么会产生yarn,它解决了什么问题,有什么优势?2、简述hadoop1与hadoop2的架构异同3、H......
  • 小程序面试题
    小程序开发和h5开发有什么区别?1.运行环境不同:h5运行环境是浏览器,包括webview,而微信小程序的运行环境是微信开发团队基于浏览器内核完全重构的一个内置解析器,小程序的运行环境并不是完整的浏览器,只是用到了一部分的h5技术,2.开发成本不同:h5开发成本比小程序高,3.获取系统的权......