86. 分隔链表
题目
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入: head = [1,4,3,2,5,2], x = 3
输出: [1,2,2,4,3,5]
示例 2:
输入: head = [1,2], x = 2
输出: [1,2]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/partition-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 ## 使用指针(使用两条链表合并)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null || head.next == null) return head;
ListNode pre = new ListNode(0,head);
ListNode p = pre;
ListNode q = head;
ListNode n = new ListNode(0);
ListNode head2 = n;
while(q != null){
if(q.val >= x){
n.next = q;
p.next = p.next.next;
n = n.next;
if(q.next != null) q = q.next;
else break;
}
else{
p = p.next;
q = q.next;
}
}
p.next = head2.next;
n.next = null;
head2.next = null;
return pre.next;
}
}