86. 分隔链表
给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
- 输入:head = 1->4->3->2->5->2, x = 3
- 输出:1->2->2->4->3->5
方法一:拆分链表
将链表拆分为两段,小于 x 的为一段,大于等于 x 的为一段,拆分完成后,合并两段链表。返回小于 x 那段的头节点
public ListNode partition(ListNode head, int x) {
ListNode low = new ListNode(0), high = new ListNode(0);
ListNode lowHead = low, highHead = high;
while(head != null) {
if (head.val < x) {
low.next = head;
low = low.next;
} else {
high.next = head;
high = high.next;
}
head = head.next;
}
low.next = highHead.next;
high.next = null;
return lowHead.next;
}