import cn.leekari.base.ListNode;
/**
* @author leekari
* @date 2020/10/15 09:52
* @description
*/
/**
* 有序链表的合并
*/
public class MergeTwListNode {
/**
* 递归实现有序链表合并
* @param l1
* @param l2
* @return
*/
public static ListNode mergeList(ListNode l1, ListNode l2){
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
ListNode listNode = new ListNode();
if (l1.val >= l2.val){
listNode = l2;
listNode.next = mergeList(l1, l2.next);
}else {
listNode = l1;
listNode.next = mergeList(l1.next, l2);
}
return listNode;
}
/**
* 非递归实现有序链表合并
* @param l1
* @param l2
* @return
*/
public static ListNode mergeList2(ListNode l1, ListNode l2){
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
ListNode listNode = new ListNode(0);
//使用临时listNode来拼接
ListNode tempListNode = listNode;
while (l1 != null && l2 != null) {
if (l1.val >= l2.val) {
tempListNode.next = l2;
l2 = l2.next;
}else {
tempListNode.next = l1;
l1 = l1.next;
}
tempListNode = tempListNode.next;
}
//链表,直接将剩余元素的根结点挂上去
if (l1 != null){
tempListNode.next = l1;
}
if (l2 != null){
tempListNode.next = l2;
}
return listNode.next;
}
public static void main(String[] args) {
ListNode l1 = new ListNode();
l1.val = 1;
l1.next = new ListNode();
l1.next.val = 3;
l1.next.next = new ListNode();
l1.next.next.val = 5;
// ListNode l2 = new ListNode();
// l2.val = 2;
// l2.next = new ListNode();
// l2.next.val = 4;
// l2.next.next = new ListNode();
// l2.next.next.val = 6;
ListNode l2 = new ListNode(0);
ListNode l = mergeList2(l1, l2);
while (l != null){
System.err.println(l.val);
l = l.next;
}
}
}