86. 分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
提示:
- 链表中节点的数目在范围
[0, 200]内 -100 <= Node.val <= 100-200 <= x <= 200
解题思路:
定义两个空的链表,分别存储小于 x和大于或等于 x 的节点,再将两个链表串连起来。
- 定义node1,node2两个空链表,并定义指针n,m分别指向两个空链表
- 遍历原链表,n指针的.next指向小于
x并移动n指针;m指针的.next指向大于或等于x的节点并移动m指针。 - 注意,遍历完原链表后,m指针要指向空,表示结束,再将n指针.next指向node2,node1就是分隔后的链表。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} x
* @return {ListNode}
*/
var partition = function(head, x) {
if(head == null) return head;
var node1 = new ListNode(-1);
var node2 = new ListNode(-1);
var q = head;
var n = node1, m = node2;
while(q != null) {
if(q.val < x) {
n.next = q;
n = n.next;
}else {
m.next = q;
m = m.next;
}
q = q.next;
}
m.next = null;
n.next = node2.next;
return node1.next;
};