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

后端开发刷题 | 合并两个排序的链表

描述

输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。

数据范围: 0≤n≤1000,−1000≤节点值≤1000

如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:

或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1,1,2,3,4,4},所以对应的输出为{-1,1,2,3,4,4},转换过程如下图所示:

示例1

输入:

{1,3,5},{2,4,6}

返回值:

{1,2,3,4,5,6}

示例2

输入:

{},{}

返回值:

{}

示例3

输入:

{-1,2,4},{1,3,4}

返回值:

{-1,1,2,3,4,4}

思路分析:

方法一:

使用递归来进行求解

  • 终止条件:两链表其中一个为空时,返回另一个链表;
  • 当前递归内容:若pHead1.val <= pHead2.val 将较小的pHead1.next与merge后的表头连接,即pHead1.next = Merge(pHead1.next,pHead2); pHead2.val较大时同理;
  • 每次的返回值:排序好的链表头;

复杂度:O(m+n) O(m+n)

代码:

import java.util.*;public class Solution {/*** * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类*/public ListNode Merge (ListNode pHead1, ListNode pHead2) {if(pHead1==null){return pHead2;}if(pHead2==null){return pHead1;}if(pHead1.val>pHead2.val){pHead2.next=Merge(pHead1,pHead2.next);return pHead2;}else{pHead1.next=Merge(pHead1.next,pHead2);return pHead1;}}
}

方法二:

空间O(1)的思路:

  • 创建一个虚拟结点和一个哨兵结点

  • 当pHead1与pHead2都不为null时循环

  • 哪个的val小哪个赋给虚拟结点的next,虚拟结点后移。

  • 退出循环后,哪个pHead不为空,哪个结点(包括剩下的)给虚拟结点的next

  • 最后返回哨兵结点的next

代码:

import java.util.*;public class Solution {/*** * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类*/public ListNode Merge (ListNode pHead1, ListNode pHead2) {ListNode dummy=new ListNode(-1);ListNode res=dummy;while(pHead1!=null&&pHead2!=null){if(pHead1.val>pHead2.val){dummy.next=pHead2;pHead2=pHead2.next;dummy=dummy.next;}else if(pHead1.val<=pHead2.val){dummy.next=pHead1;pHead1=pHead1.next;dummy=dummy.next;}}if(pHead1!=null){dummy.next=pHead1;}if(pHead2!=null){dummy.next=pHead2;}return res.next;}
}


http://www.mrgr.cn/news/4585.html

相关文章:

  • AI模拟器
  • hive4.0.0部署以及与MySQL8.4连接
  • 【MySQL】查询进阶
  • zyx青岛实训day 29 8/15 (python脚本使数据库读写分离,mysql主从开机自动同步,python操作数据库,MyCat插件的学习)
  • Java List 转map,分组,排序
  • 【微服务】SpringCloud 1-9章
  • 46.x86游戏实战-DXX封包实现进入地图房间
  • 迪杰斯特拉(Dijkstra)算法(C/C++)
  • 【JS|第25期】探索HTTP POST请求:请求体的演变与应用
  • 理解安全组与防火墙的关系:云安全的双重保障
  • 企业高性能web服务器【Nginx详解】
  • Redis7基础篇(七)
  • 分享一个基于Spark的招聘数据可视化与分析系统Hadoop大数据源码(源码、调试、LW、开题、PPT)
  • 基于STM32和云平台的花卉养护系统设计(微信小程序)(209)
  • 为什么这么多人选择海运系统?它适用于什么场景?
  • 【解压即玩】PC 侠-盗-猎¥车手 5 中文版+通关存档,超高画质,操作流畅,优化很棒
  • 探索用于多类无监督异常检测的状态空间模型
  • C++位运算
  • Qt消息对话框的实现
  • icon文件解析和生成