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

A1003--顺序合并两个非有序的链表

程序员文章站 2022-06-26 11:31:31
...

题目

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

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

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

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

输入格式

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

输出格式

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

样例输入复制

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

样例输出复制

1->1->0->2->2->3->NULL
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        String str1=scanner.nextLine();
        String str2=scanner.nextLine();
        String[] arr1=str1.split("->",-1);
        String[] arr2=str2.split("->",-1);
        int len1=arr1.length;
        int len2=arr2.length;
        //取总长度
        int len=len1+len2;
        int k=0;
        int j=0;
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<len && k<len1 && j<len2;i++)
        {
            int v1=Integer.parseInt(arr1[k].replace(".",""));
            int v2=Integer.parseInt(arr2[j].replace(".",""));
            if(v1<=v2){
                sb.append(v1);
                sb.append("->");
                k++;
            }else{
                sb.append(v2);
                sb.append("->");
                j++;
            }
        }
        //如果第1个先排完
        if(k>=len1){
            for(int m=j;m<len2;m++){
                sb.append(arr2[m].replace(".",""));
                sb.append("->");
            }
        }
        //如果第2个先排完
        else if(j>=len2){
            for(int m=k;m<len1;m++){
                sb.append(arr1[m].replace(".",""));
                sb.append("->");
            }
        }
        sb.append("NULL");
        System.out.println(sb.toString());
    }
}