给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
var partition = function(head, x) {
if(!head) return null;
// 定义两个虚拟头结点
let bigRet = new ListNode();
let smallRet = new ListNode();
// 定义两个指针,分别指向虚拟头
let big = bigRet;
let small = smallRet;
let cur = head;
while(cur){
// 先保存下一个节点
const next = cur.next;
// 断开当前节点,使其成为一个孤立的节点
cur.next = null;
// 判断当前节点值
// 如果小于x则连接在 samll链表中
// 如果大于x则连接在 big链表中
if(cur.val < x){
small.next = cur;
small = cur;
}else{
big.next = cur;
big = cur;
}
// 当前cur指针移到下一个节点
// next 事先已近保存
cur = next;
}
// 小链表的尾部连接大链表头部
small.next = bigRet.next;
// 返回整个链表
return smallRet.next
};