import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param x int整型 
     * @return ListNode类
     */
    public ListNode partition (ListNode head, int x) {
      ListNode node = new ListNode(-1);
        node.next = head;
        ListNode res = node;
        if(head==null)
            return null;
        while(node.next!=null&&node.next.val<x){
            node = node.next;
        }
        ListNode temp = node.next;//后半部分节点,node为前半部分最后一个<x的节点
        ListNode h2 = node.next;//记录后半部分头节点
        ListNode pre = node;//记录前置节点,方便做删除操作
        while(temp!=null){
            if(temp.val<x){
                //链表后半部分删除节点操作
                ListNode t = temp.next;
                pre.next = temp.next;
                //链表的前半部分尾部插入节点操作
                node.next = temp;
                temp.next = null;
                node = node.next;
                temp = t;
            }
            else {
                pre = temp;
                temp = temp.next;
            }
        }
        node.next = h2;
        return res.next;
    }
}