java中将两个有序链表合并为一个有序链表:
1.必须保证两个链表为有序链表
2.在两个链表都不为空的条件下,设一个 last=null;
(1)如果链表1的值小于等于链表2的值,进行循环,先放链表1的值到新链表result,如果result为空,视为头插,如果不为空,视为尾插,其中要保证last永远为最后一个结点,最后让循环走起来
(2)如果链表2的值小于链表1的值,与(1)中方法相同,只是链表1全换为链表2即可
3.如果链表2为空了,链表1不为空时,把链表1接在last的下一个,之后,可以不用保证last为最后一个;链表1为空,链表2不为空,与前面思路相同
4.返回result新结点,为合并的有序链表
//将两个有序的链表合并为一个有序的链表
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
ListNode newNode = null;
ListNode last = null;
ListNode cur1 = l1;
ListNode cur2 = l2;
while(cur1 != null && cur2 != null){
if(cur1.val < cur2.val){
ListNode next = cur1.next;
if(newNode == null){
//头插
cur1.next = newNode;
newNode = cur1;
}else{
last.next = cur1;
}
//保证last永远指向最后一个结点
last = cur1;
cur1 = next;
}else{
ListNode next = cur2.next;
if(newNode == null){
cur2.next = newNode;
newNode = cur2;
}else{
last.next = cur2;
}
last = cur2;
cur2 = next;
}
}
if(cur1 != null){
last.next = cur1;
}else{
last.next = cur2;
}
return newNode;
}