# 86.Partition List (M)

## 1.Description(Easy)

Given the `head` of a linked list and a value `x`, partition it such that all nodes **less than** `x` come before nodes **greater than or equal** to `x`.

You should **preserve** the original relative order of the nodes in each of the two partitions.

&#x20;

**Example 1:**

![](https://assets.leetcode.com/uploads/2021/01/04/partition.jpg)

```
Input: head = [1,4,3,2,5,2], x = 3
Output: [1,2,2,4,3,5]
```

**Example 2:**

```
Input: head = [2,1], x = 2
Output: [1,2]
```

&#x20;

**Constraints:**

* The number of nodes in the list is in the range `[0, 200]`.
* `-100 <= Node.val <= 100`
* `-200 <= x <= 200`

## 2.Code

创建两个左右链表分别连接比X小和大的节点，最后把这两个连接起来。

```
 public ListNode partition(ListNode head, int x) {
        ListNode leftDummy=new ListNode(0);
        ListNode rightDummy=new ListNode(0);
        ListNode left=leftDummy;
        ListNode right=rightDummy;

        while(head!=null){
            if(head.val<x){
                left.next=head;
                left=head;//be equal to left=left.next;
            }
            else{
                right.next=head;
                right=head;
            }
            head=head.next;
        }

        right.next=null;
        left.next=rightDummy.next;
       return leftDummy.next;       
    }
```
