AcWing3642:链表合并
Posted 劭兮劭兮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing3642:链表合并相关的知识,希望对你有一定的参考价值。
问题
原题链接:链表合并
解决办法
利用数组辅助完成本题,和前不久做的一道题极其相似,思路大致一样,但是本题代码比较啰嗦的原因是,需要自己实现获取输入内容功能(多半是String类型和int类型的转换),所以,代码量较多,注释的代码是测试的代码。
思路参照博客:
AcWing34:合并两个排序的链表
JAVA代码实现
import java.util.Scanner;
class Main
public static void main(String[] args)
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
// 获取第一个链表的内容
String number1 = scanner.nextLine();
String string1 = scanner.nextLine();
// 获取第二个链表的内容
String number2 = scanner.nextLine();
String string2 = scanner.nextLine();
// 测试scanner获取的数据是否正确
// System.out.println(number1);
// System.out.println(string1);
// System.out.println(number2);
// System.out.println(string2);
// 将链表长度转化为正确的int类型
int num1 = Integer.parseInt(number1);
int num2 = Integer.parseInt(number2);
// System.out.println(num1);
// System.out.println(num2);
String[] array1 = string1.split(" ");
String[] array2 = string2.split(" ");
// 要比较数值的大小,所以我们提前把String数组转化为int数组
int[] arr1 = new int[num1];
for(int m = 0;m < num1;m++)
arr1[m] = Integer.parseInt(array1[m]);
int[] arr2 = new int[num2];
for(int n = 0;n < num2;n++)
arr2[n] = Integer.parseInt(array2[n]);
// 测试是否转化成功
// for(int i = 0;i<arr1.length;i++)
// System.out.print(arr1[i]);
//
//
// for(int j = 0;j<arr2.length;j++)
// System.out.print(arr2[j]);
//
// 创建一个数组用于记录排好序的数组
int[] res = new int[num1+num2];
int i = 0;
int j = 0;
int k = 0;
while(i < num1 && j < num2)
if(arr1[i] < arr2[j])
res[k] = arr1[i];
i++;
else
res[k] = arr2[j];
j++;
k++;
// 当其中一个链表为空时,
while(i >= num1 && j < num2)
res[k] = arr2[j];
k++;
j++;
while(i < num1 && j >= num2)
res[k] = arr1[i];
k++;
i++;
// 输出最终数组的结果
for(int w=0;w<res.length;w++)
System.out.print(res[w]+" ");
小记:
原题链接:链表合并
以上是关于AcWing3642:链表合并的主要内容,如果未能解决你的问题,请参考以下文章