非递归
/** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ function mergeTwoLists( l1 , l2 ) { let root = new ListNode(-1); let now = root; while (l1 || l2) { if (!l1 || !l2) { now.next = l1 ? l1 : l2; break; } if (l1.val > l2.val) { now.next = l2; l2 = l2.next; } else { now.next = l1; l1 = l1.next; } now = now.next; } return root.next; }
递归
/** * * @param l1 ListNode类 * @param l2 ListNode类 * @return ListNode类 */ function mergeTwoLists( l1 , l2 ) { if (!l1 || !l2) return l1 ? l1 : l2; let res = null; if (l1.val > l2.val) { res = l2; res.next = mergeTwoLists(l1, l2.next); } else { res = l1; res.next = mergeTwoLists(l1.next, l2); } return res; }
递归精简版
function mergeTwoLists( l1 , l2 ) { if (!l1 || !l2) return l1 ? l1 : l2; return l1.val > l2.val ? ((l2.next = mergeTwoLists(l1, l2.next)) ? l2 : l2) : ((l1.next = mergeTwoLists(l1.next, l2)) ? l1 : l1); }