先声明一个虚拟头结点,节点对比,链接到结果后边,任意一条链表先遍历完循环终止,另一条剩下的接在结果后边即可。
时间复杂度O(m+n);//两个链表的长度和
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeTwoLists = function(list1, list2) {
let res = new ListNode();
let result = res;//记录结果
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
res.next = list1;
list1 = list1.next;
} else {
res.next = list2;
list2 = list2.next;
}
res = res.next;
}
list1 != null ? res.next = list1: res.next = list2;
return result.next;
};
递归写法
时间复杂度:O(m+n)
var mergeTwoLists = function(list1, list2) {
if(!list1) return list2;
if(!list2) return list1;
if(list1.val < list2.val) {
list1.next = mergeTwoLists( list1.next, list2 )
return list1;
} else {
list2.next = mergeTwoLists(list1 ,list2.next)
return list2;
}
};