1、合并两个有序链表
package com.yuan;
import java.util.ArrayList;
import java.util.List;
/**
* @author QLBF 合并两个有序链表 并保持单调性
* @version 1.0
* @date 2021/5/29 16:20
*/
class ListNode6{
int val;
ListNode6 next;
public ListNode6(int val) {
this.val = val;
}
}
public class demo6 {
//遍历
public static List printList(ListNode6 head){
if (head==null){
return null;
}
ArrayList<Integer> arrayList=new ArrayList();
while (head!=null){
arrayList.add(head.val);
head=head.next;
}
return arrayList;
}
//合并
public static ListNode6 merge(ListNode6 list1,ListNode6 list2){
if (list1==null){
return list2;
}
if (list2==null){
return list1;
}
if (list1.val<list2.val){
list1.next=merge(list1.next,list2);
return list1;
}else {
list2.next=merge(list1,list2.next);
return list2;
}
}
public static void main(String[] args) {
ListNode6 n1=new ListNode6(1);
ListNode6 n3=new ListNode6(3);
ListNode6 n5=new ListNode6(5);
n1.next=n3;
n3.next=n5;
n5.next=null;
ListNode6 n2=new ListNode6(2);
ListNode6 n4=new ListNode6(4);
n2.next=n4;
n4.next=null;
List list1 = printList(n1);
List list2 = printList(n2);
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
ListNode6 mergelist = merge(n1, n2);
System.out.println("合并后:"+printList(mergelist));
}
}

参考:https://blog.youkuaiyun.com/weixin_45625687/article/details/107940853
2、合并两个数组

public static void main(String[] args) {
int[] num1=new int[]{2,3,16,5,7,0,0,0,0};
int[] num2=new int[]{9,1,4,2};
int[] merge = merge(num1, 5, num2, num2.length);
System.out.println(Arrays.toString(merge));
}
private static int[] merge(int[] num1, int length1, int[] num2, int length2) {
//把num2复制到num1里去,num2从0开始到length2,num1是要从length1后开始的
System.arraycopy(num2,0,num1,length1,length2);
Arrays.sort(num1);
return num1;
}
这代码通用性太低,还是考虑用双指针那些吧
参考:https://blog.youkuaiyun.com/weixin_44591656/article/details/113737615
private static int[] mergeIndexArray(int[] arr1,int m,int[] arr2,int n){
int arr1_p=m;
int arr2_p=n;
int k=m+n+1;
while (n>=0){
if (arr1[m]>=arr2[n]){
arr1[k]=arr1[m];
m--;
k--;
}else {
arr1[k]=arr2[n];
n--;
k--;
}
}
return arr1;
}
//test代码
int[] arr1=new int[]{-1, 1, 4, 0, 0, 0};
int[] arr2=new int[]{2, 5, 6};
int[] ints = mergeIndexArray(arr1, 2,arr2 , arr2.length-1);
本文介绍如何使用Java实现合并两个有序链表和数组,同时保持合并后的元素有序,并提供两种方法,一种是递归双指针,另一种是数组复制排序。通过实例演示和代码优化,探讨了提高代码效率和通用性的技巧。
555

被折叠的 条评论
为什么被折叠?



