剑指offer JZ25 合并两个排序的链表
创始人
2024-06-02 02:04:51
0

Java 合并两个排序的链表


文章目录

  • Java 合并两个排序的链表
  • 一、问题描述
  • 二、迭代版本求解
  • 三、借助额外数组


  使用迭代和借助额外数组解决剑指offer第JZ25题合并两个排序的链表的问题。


一、问题描述

  输入两个递增的链表,单个链表的长度为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.先判断list1和list2是不是为空,如果有一个为空,那另一个即为所求输出;
 ●2.初始化:定义head指向新链表的头结点,newList用于指向新节点。
 ●3.循环判断list1和list2节点值的大小,如果list1指向的结点值小于等于list2指向的结点值,则将list1指向的结点值链接到newList的next指针,然后list1指向下一个结点值,否则,让list2指向下一个结点值。
 ●4.循环对比步骤,直到list1或者list2为null,将list1或者list2剩下的部分链接到newList的后面。

/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/public class Solution {public ListNode Merge(ListNode list1, ListNode list2) {//判断是否有空链表if (list2 == null) {return list1;}if (list1 == null) {return list2;}if(list1 == null && list2 == null){return null;}//创建head指向新链表的头结点,newList用于指向新节点。ListNode head = new ListNode(0);ListNode  newList= head;//   循环判断list1和list2节点值的大小while (list1 != null && list2 != null) {switch (list1.val <= list2.val ? 1 : 2) {  //三元运算符case 1:      newList.next = list1;      //list1.val <= list2.val,将list1指向的结点值链接到newList的next指针list1 = list1.next;        //list1指向下一个结点值break;case 2: newList.next = list2;     //list1.val > list2.val,将list2指向的结点值链接到newList的next指针list2 = list2.next;       //list2指向下一个结点值break;}newList = newList.next;     //添加一个链表元素后,newList指向下一个结点值,重新循环添加}//  list1或者list2为null,将list1或者list2剩下的部分链接到newList的后面。if(list1 == null){newList.next = list2;}if(list2 == null){newList.next = list1;}return head.next;  //头结点head是空,head的下一个节点才是第一个有值的节点}
}

三、借助额外数组

  解题思路:
 ●1.创建额外存储数组 nums
 ●2.依次循环遍历 pHead1, pHead2,将链表中的元素存储到 nums中,再对nums进行排序
 ●3.依次对排序后的数组 nums取数并构建合并后的链表

public class Solution {public ListNode Merge(ListNode list1,ListNode list2) {// list1 或者list2为空的情况if(list1==null) return list2;if(list2==null) return list1;if(list1 == null && list2 == null){return null;}//将两个链表存放在list中ArrayList list = new ArrayList<>();// 遍历存储list1while(list1!=null){list.add(list1.val);list1 = list1.next;}// 遍历存储list2while(list2!=null){list.add(list2.val);list2 = list2.next;}// 对 list 排序Collections.sort(list);// 将list转换为 链表ListNode newHead = new ListNode(list.get(0));ListNode cur = newHead;for(int i=1;i

注意
  Collections类中的sort方法可以实现对List接口的集合进行排序。这个方法假定列表元素实现了Comparable接口。可以根据指定比较器产生的顺序对指定列表进行排序。

sort(List list, Comparator c) 

   Collections.sort(list);实现升序排列
   Collections.sort(list,Collections.reverseOrder());实现降序排列

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...