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

AcWing3642:链表合并

AcWing34:合并两个排序的链表

AcWing34:合并两个排序的链表

AcWing34:合并两个排序的链表

AcWing 836. 合并集合

剑指Off打卡day36—— ACWing29. 删除链表中重复的节点