将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
import java.util.*;
class ListNode {
public int val;
ListNode next;
public ListNode(){}
public ListNode(int val){
this.val=val;
this.next=null;
}
}
class LinkList{
ListNode first;
public LinkList(int[] a,int n){ //尾插法建立单链表
first=new ListNode();
ListNode r=first;
for(int i=0;i<n;i++)
{
ListNode s=new ListNode(); //为每个数组元素建立一个节点
s.val=a[i];
r.next=s; //使当前节点的下一个节点指向s
r=s;
}
r.next=null; //终端节点的下一个节点置为空
}
}
class Solution{
public ListNode mergeTwoLists(ListNode l1,ListNode l2){
ListNode prehead=new ListNode(-1);
ListNode prev=prehead;
while(l1!=null && l2!=null){
if(l1.val<=l2.val){
prev.next=l1;
l1=l1.next;
}else{
prev.next=l2;
l2=l2.next;
}
prev=prev.next;
}
prev.next=l1==null ? l2:l1;
return prehead.next;
}
}
class Print{
public Print(ListNode p){
while(p!=null)
{
System.out.print(p.val);
p=p.next;
}
}
}
public class Main{
public static void main(String args[]){
Scanner in=new Scanner(System.in);
int m=in.nextInt(); //第一个链表的长度
int n=in.nextInt(); //第二个链表的长度
int i;
int[] arr1=new int[105];
int[] arr2=new int[105];
for(i=0;i<m;i++)
arr1[i]=in.nextInt();
LinkList list1=new LinkList(arr1,m);
for(i=0;i<n;i++)
arr2[i]=in.nextInt();
LinkList list2=new LinkList(arr2,n);
ListNode l1=list1.first.next;
ListNode l2=list2.first.next;
ListNode ret = new Solution().mergeTwoLists(l1, l2);
Print pt=new Print(ret); //打印链表
}
}