给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

示例 1:


输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

提示:

  • 链表中节点的数目在范围 [0, 200]
  • -100 <= Node.val <= 100
  • -200 <= x <= 200
这道题主要就是分割遍历链表,让每一个点都是独立的,这样借助俩个探测节点组合成新的链表就不会出现 /Error - Found cycle in the ListNode  这个错误了
//leetcode submit region begin(Prohibit modification and deletion)

/**
 * 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) {
        ListNode dummy1 = new ListNode(-1);
        ListNode dummy2 = new ListNode(-1);
        ListNode p1 = dummy1;
        ListNode p2 = dummy2;
        ListNode p = head;


        while (p != null) {
            //按照给定值开始分类

            if (p.val < x) {
                //左边小值
                p1.next = p;
                p1 = p1.next;
                //System.out.println("dummy1: " + dummy1.val);

            } else {
                //右边大值
                p2.next = p;
                p2 = p2.next;
                //System.out.println("dummy2: " + dummy2.val);
            }
            //System.out.println("p: " + p.val);
            //Error - Found cycle in the ListNode 断开原链表
            ListNode temp = p.next;
            p.next = null;
            p = temp;

        }

        // 连接两个链表
        p1.next = dummy2.next;

        return dummy1.next;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

不恋尘世浮华,不写红尘纷扰