当前位置: 首页 > news >正文

7 合并两个有序列表

21. 合并两个有序链表 - 力扣(LeetCode)

方法1 优先级队列

之前做过合并k个有序列表,两个方法是一样的

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //递归,dfs的作用是拼接除了该节点的两个链表,并且返回头结点
        if(list1 == null) return list2;
        if(list2 == null) return list1;
        PriorityQueue<ListNode> queue = new PriorityQueue<>((a,b) -> a.val - b.val);
        queue.offer(list1);
        queue.offer(list2);
       ListNode result = new ListNode(0);
       ListNode head = result;
        while(!queue.isEmpty()) {
            result.next = queue.poll();
            if(result.next.next != null){
                queue.offer(result.next.next);
            }
            result = result.next;
        }
        return head.next;
    
    }
}

方法二:递归

就是我们将每个子问题抽离出来,问题就是每次传入两个链表的头节点进行比大小,选出值较小的节点,值较小的那个节点

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        //递归,dfs的作用是拼接除了该节点的两个链表,并且返回头结点
        if(list1 == null) return list2;
        
        if(list2 == null) return list1;
        
        if(list1.val < list2.val){
            list1.next = mergeTwoLists(list1.next, list2);
            return list1;
        }else{
            list2.next = mergeTwoLists(list1, list2.next);
            return list2;
        }
    
    }
}

方法三:利用数组

把值放到数组里排序,排序完后生成节点返回

相关文章:

  • MediaPipe软件包如何构建和安装
  • Vue中组件和插件有什么区别?
  • Android 根据Url使用Retrofit框架进行文件下载
  • 数字内容体验优化用户参与路径
  • AI比人脑更强,因为被植入思维模型【15】马斯洛需求层次理论
  • 使用Python开发自动驾驶技术:车道线检测模型
  • Java的流程控制
  • 机器学习与数据分析相关数学基础知识总结
  • Redis 内存管理
  • Java中的多态
  • Java IO性能优化:字节流与缓冲流的对比与实战分析
  • Cache与虚拟存储:计算机系统中的“快取侠”与“空间魔术师”
  • 导出tdengine创建表语句
  • Java并发编程(1)
  • 【指针(2)-- 使用指针的技巧】
  • BBR 和 CUBIC 对长肥管道的不同反应
  • 使用请求调用本地部署的stable-diffusion接口
  • 从零开始实现 C++ TinyWebServer 处理请求 HttpRequest类详解
  • 3D引擎:Three.js有什么有什么优缺点?
  • 数据人的进阶之路:四年数仓实践与成长思考
  • “80后”萍乡市安源区区长邱伟,拟任县(区)委书记
  • 爬坡难下坡险,居民出行难题如何解?
  • 中国证券业协会修订发布《证券纠纷调解规则》
  • 真人秀《幸存者》百万美元奖金,25年间“缩水”近一半
  • 小米SU7 Ultra风波升级:数百名车主要求退车,车主喊话雷军“保持真诚”
  • 韩国总统大选候选人登记结束,共7人参选