题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路来源于 归并排序 合并两有序的数组:
思路是 有两个指针分别指向待合并的链表的头结点,将两个指针数值较小的指针后移,直到有一个为空
具体实现代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode head; //头结点
ListNode listMerge ; //指向当前链表尾部
//先进行基本的判断
if(list2==null&&list1==null){
return null;
}else if(list2 !=null &&list1==null){
return list2;
}else if(list2==null&&list1!=null){
return list1;
}else if( list1.val>list2.val){
listMerge = new ListNode(list2.val);
list2=list2.next;
}else{
listMerge = new ListNode(list1.val);
list1 = list1.next;
}
head = listMerge;
while(list1!=null&&list2!=null){
if(list1.val<list2.val){
//生成新节点并置于新链表的尾部
listMerge.next = new ListNode(list1.val);
listMerge = listMerge.next;
list1 = list1.next;
}else{
listMerge.next = new ListNode(list2.val);
listMerge = listMerge.next;
list2 =list2.next;
}
}
while(list2 != null){
listMerge.next = new ListNode(list2.val);
listMerge = listMerge.next;
list2 = list2.next;
}
while(list1 != null){
listMerge.next = new ListNode(list1.val);
listMerge = listMerge.next;
list1 = list1.next;
}
return head;
}
}