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:链表合并的主要内容,如果未能解决你的问题,请参考以下文章