剑指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());实现降序排列

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...