問題描述
給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分區中元素的初始相對順序。
示例:
輸入: head = 1->4->3->2->5, x = 2
輸出: 1->2->4->3->5
解法一
解題思路: 使用兩個指針分別指向小於x和大於等於x的節點,遍歷鏈表,將小於x的節點連接到前一個小於x的節點,將大於等於x的節點連接到前一個大於等於x的節點。最後將兩個鏈表連接起來。
/*
* @lc app=leetcode.cn id=725 lang=javascript
*
* [725] 分隔鏈表
*/
// @lc code=start
function splitListToParts(head, k, x) {
let dummy1 = new ListNode(0);
let dummy2 = new ListNode(0);
let cur1 = dummy1;
let cur2 = dummy2;
let node = head;
while (node) {
if (node.val < x) {
cur1.next = node;
cur1 = cur1.next;
} else {
cur2.next = node;
cur2 = cur2.next;
}
node = node.next;
}
cur1.next = null;
cur2.next = null;
let parts = [];
for (let i = 0; i < k; i++) {
let part = dummy1.next;
dummy1.next = null;
if (i < k - 1) {
dummy1.next = cur2.next;
cur2.next = null;
}
parts.push(part);
dummy1 = cur2;
cur2 = new ListNode(0);
}
return parts;
}
// @lc code=end