題目比較簡(jiǎn)單:
<h2>Merge Two Sorted Lists</h2>
<h5>Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.</h5>
簡(jiǎn)要說(shuō)就是合并兩個(gè)有序鏈表。
如果新建一個(gè)列表,遍歷兩個(gè)列表依據(jù)大小復(fù)制到新列表中,比較簡(jiǎn)單,但是空間復(fù)雜度為O(n+m),所以想著直接在原列表上合并;
直接上JS代碼:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
var prev = null;
var last = null;
if (l1 && l2 && l1.val > l2.val) {
return mergeTwoLists(l2, l1); //保證起始狀態(tài)l1頭結(jié)點(diǎn)小于l2的
}
var head = l1 ? l1 : l2;
while (l1 && l2) {
prev = l1;
while (l1 && l1.val <= l2.val) {
prev = l1;
l1 = l1.next;
}
//開(kāi)始第一個(gè)大于l2的,此時(shí)l1.val > l2.val
if (l1) {
prev.next = l2;
last = l2;
while (l2 && l2.val < l1.val) {
last = l2;
l2 = l2.next;
}
last.next = l1;
} else {
prev.next = l2;
}
}
return head;
};
思路也很簡(jiǎn)單:將l2并入到l1中(l1的頭結(jié)點(diǎn)<l2的頭結(jié)點(diǎn))。思考兩種情況:l1的結(jié)點(diǎn)什么時(shí)候大于l2的結(jié)點(diǎn),當(dāng)大于的時(shí)候怎么做,小于的時(shí)候怎么做即可。于是有了上述代碼,不復(fù)雜一看就明白。
寫(xiě)此記錄一下第一次提交就accepted的一種喜悅感。希望以后能越來(lái)越多的一次通過(guò)。