题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
(1) 先检查所有的非法值;
(2) 定义mList1和mList2,若mList1.val>mList2.val,则交互头指针;
(3) 由(2)步可知mList2.val>=mList1.val,所以判断条件mList2.val>mList1.next.val,若为真,则mList1=mList1.next,
若为假,则mList2插入到mList1后。
(4) 若mList1为最后一个,mList2还没到尾,则直接将mList2接到mList1后面。
(5) 返回原始的list1。
代码:
/*
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 mList1,mList2,temp;
if(list1==null&&list2==null)
return null;
if(list1!=null&&list2==null)
return list1;
if(list1==null&&list2!=null)
return list2;
if(list1.val>list2.val){
mList1 = list2;
mList2 = list1;
}else{
mList1 = list1;
mList2 = list2;
}
// mList1和mList2都没遍历完,则执行循环体
while(mList1.next!=null&&mList2!=null){
// mList2肯定大于mList1,
//只需比较mList2和mList1.next。
if(mList2.val>mList1.next.val){
mList1 = mList1.next;
continue;
}
// mList2在mList1和mList1.next之间
temp = mList2.next;
mList2.next = mList1.next;
mList1.next = mList2;
mList2 = temp;
}
// mList1遍历完了,mList2还有数,接在mList1后面
if(mList2!=null){
mList1.next = mList2;
}
return list1;
}
}