Skip to content

Commit

Permalink
feat(leecode): 23.合并k个升序链表
Browse files Browse the repository at this point in the history
  • Loading branch information
z979054461 committed Mar 17, 2024
1 parent 2858ed1 commit 3309629
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 25 deletions.
4 changes: 3 additions & 1 deletion docs/10.LeeCode/23.合并k个升序链表.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,6 @@ Langs: c cpp csharp golang java javascript kotlin php python python3 ruby rust s
<li><code>lists[i].length</code> 的总和不超过 <code>10^4</code></li>
</ul>

<<< @/src/LeeCode/23.合并k个升序链表.js
<<< @/src/LeeCode/23.合并k个升序链表.js
<<< @/src/LeeCode/23.合并k个升序链表1.js
<<< @/src/LeeCode/23.合并k个升序链表2.js
47 changes: 23 additions & 24 deletions src/LeeCode/23.合并k个升序链表.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/*
* @lc app=leetcode.cn id=23 lang=javascript
*
* [23] 合并K个升序链表
* [23] 合并 K 个升序链表
* 递归
*/

// @lc code=start
Expand All @@ -17,29 +18,27 @@
* @return {ListNode}
*/
var mergeKLists = function (lists) {
if (lists.length < 1) return null;
if (lists.length === 1) return lists[0];
if (lists.length === 0) {
return null
}

const hair = new ListNode(0, lists.shift());
let p = hair, q, r;
while (lists.length) {
q = lists.shift();
while (q) {
if (p.next === null) {
p.next = q;
break;
} else if (q.val <= p.next.val) {
r = q.next;
q.next = p.next;
p.next = q;
q = r;
} else {
p = p.next;
}
}
p = hair;
return lists.reduce((acc, item) => {
const dummy = new ListNode()
let p = dummy
let l1 = acc
let l2 = item
while (l1 && l2) {
if (l1.val <= l2.val) {
p.next = l1
l1 = l1.next
} else {
p.next = l2
l2 = l2.next
}
p = p.next
}
return hair.next
};
p.next = l1 ? l1 : l2
return dummy.next
})
}
// @lc code=end

46 changes: 46 additions & 0 deletions src/LeeCode/23.合并k个升序链表1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* @lc app=leetcode.cn id=23 lang=javascript
*
* [23] 合并K个升序链表
* 非递归
*/

// @lc code=start
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
var mergeKLists = function (lists) {
if (lists.length < 1) return null;
if (lists.length === 1) return lists[0];

const hair = new ListNode(0, lists.shift());
let p = hair, q, r;
while (lists.length) {
q = lists.shift();
while (q) {
if (p.next === null) {
p.next = q;
break;
} else if (q.val <= p.next.val) {
r = q.next;
q.next = p.next;
p.next = q;
q = r;
} else {
p = p.next;
}
}
p = hair;
}
return hair.next
};
// @lc code=end

45 changes: 45 additions & 0 deletions src/LeeCode/23.合并k个升序链表2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* @lc app=leetcode.cn id=23 lang=javascript
*
* [23] 合并 K 个升序链表
* 非递归
*/

// @lc code=start
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode[]} lists
* @return {ListNode}
*/
var mergeKLists = function (lists) {
if (lists.length === 0) {
return null
}

return lists.reduce((acc, item) => {
const dummy = new ListNode()
let p = dummy
let l1 = acc
let l2 = item
while (l1 && l2) {
if (l1.val <= l2.val) {
p.next = l1
l1 = l1.next
} else {
p.next = l2
l2 = l2.next
}
p = p.next
}
p.next = l1 ? l1 : l2
return dummy.next
})
}
// @lc code=end

0 comments on commit 3309629

Please sign in to comment.