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]+" ");
		}
	
	}

}

小记:
原题链接:链表合并

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值