输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路1:将两个链表的所有元素按顺序放在一个list里面,遍历list,每次取出list里面val值最小的一个节点放入一个数组,并从list中删除这个节点,数组里依次存放的就是满足单调不减的新链表。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.ArrayList;
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ArrayList<ListNode> arr = new ArrayList<ListNode>();
while(list1!=null){
arr.add(list1);
list1 = list1.next;
}
while(list2!=null){
arr.add(list2);
list2 = list2.next;
}
int max = arr.size();
ListNode[] result = new ListNode[max];
int count = 0;
while(arr.size()!=0){
int min = 0;
for(int i=0;i<arr.size();i++){ //找出最小的一个节点依次放入数组
if(arr.get(i).val<arr.get(min).val){
min = i;
}
}
result[count] = arr.get(min);
arr.remove(min);
count++;
}
for(int i=0;i<max;i++){
if(i<max-1){
result[i].next = result[i+1];
}else{
result[i].next = null;
}
}
ListNode root = null;
if(result.length!=0){
root = result[0];
}
return root;
}
}
思路2:遍历两个链表的当前节点,选小的一个作为新链表的当前节点,依次递归。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null){
return list2;
}
if(list2==null){
return list1;
}
ListNode head = null;
if(list1.val<list2.val){
head = list1;
head.next = Merge(list1.next, list2);
}else{
head = list2;
head.next = Merge(list1, list2.next);
}
return head;
}
}