分隔链表
给你一个链表,和一个值x,请将小于x值的节点放在大于或等于x的节点之前。
解题代码
思路:使用两个链表,将大于等于x的值,连接到一个链表,小于x的值连接到另一个。最后连接两个链表即可
var partition = function(head, x) {
if (!head) return null;
let rs = new ListNode(); // 存放小于x
let rb = new ListNode(); // 存放大于等于x
let r1 = rs; // 小链表头指针
let r2 = rb; // 大链表头指针
let p = head; // 传入的链表
let q;
while (p) {
q = p.next; // 存储下一个节点
if (p.val < x){ // 小于x 存入r1
p.next = null; // 断开连接
r1.next = p;
r1 = p; // 保证r1 是在链表的最后一个节点
} else {
p.next = null; // 断开连接
r2.next = p;
r2 = p; // 保证r2 是在链表的最后一个节点
}
p = q; // 原链表指向下一位,继续循环
}
r1.next = rb.next; // 连接两个链表 r1是小于尾节点,连接大于头节点
return rs.next; // 返回存储小于链表头节点
};