欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计蒜客-蓝桥杯-顺序合并两个非有序的链表

程序员文章站 2022-03-04 20:11:40
...

给定由整数组成的两个无序数组,根据顺序合并成一个数组。

输入包括两行,每行由若干个由->分隔的整数组成,分别表示以最左整数为链表头,单向指向右侧节点的链表,每行输入均以 .结尾。

输出为合并后的单向链表,由->表示其间的指针,最终指向由NULL表示的空值。

在合并过程中,比较两个链表当前待合并的第一个元素,选择其中较小的那个元素放入合并后的数组。

输入格式

输入两行字符串,每行字符串由 有符号整数、->和.组成。

输出格式

输出一行字符串,表示合并后的数组。

样例输入复制

1->2->3.
1->0->2.

样例输出复制

1->1->0->2->2->3->NULL

import java.util.Scanner;
import java.util.*;

public class Main46 {

		static StringBuilder s = new StringBuilder();//可将字符串连接起来
	 
		public static void main(String[] args) {
			core();//调用方法
		}
	 
		public static void core() {
			Scanner sc = new Scanner(System.in);
			String s1 = sc.nextLine();
			String s2 = sc.nextLine();
			sc.close();
			String[] str1 = s1.substring(0, s1.length() - 1).split("->");//以‘->’分割字符串
			String[] str2 = s2.substring(0, s2.length() - 1).split("->");
			int minlength = str1.length < str2.length ? str1.length : str2.length;//用小的长度作为公共部分
			int maxlength = str1.length > str2.length ? str1.length : str2.length;
			//多余的部分,进行加入
			for (int i = 0; i < minlength; i++) {
				if (Integer.parseInt(str1[i]) < Integer.parseInt(str2[i])) {
					s.append(str1[i] + "->");
					s.append(str2[i] + "->");
				} else {
					s.append(str2[i] + "->");
					s.append(str1[i] + "->");
				}
			}
			if (minlength == maxlength) {
				System.out.println(s.append("NULL"));
			}else {
				for(int i=minlength;i<maxlength;i++) {
					if(str1.length == maxlength) {
						s.append(str1[i] + "->");
					}else {
						s.append(str2[i] + "->");
					}
				}
				System.out.println(s.append("NULL"));
			}
		}
	}