# Partition List

Given a linked list and a valuex, 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.

For example,\
Given`1->4->3->2->5->2`and x= 3,\
return`1->2->2->4->3->5`.

这道题就是说给定一个x的值，小于x都放在大于等于x的前面，并且不改变链表之间node原始的相对位置。每次看这道题我老是绕晕，纠结为什么4在3的前面。。其实还是得理解题意，4->3->5都是大于等3的数，而且这保持了他们原来的相对位置 。

所以，这道题是不需要任何排序操作的，题解方法很巧妙。

new两个新链表，一个用来创建所有大于等于x的链表，一个用来创建所有小于x的链表。

遍历整个链表时，当当前node的val小于x时，接在小链表上，反之，接在大链表上。这样就保证了相对顺序没有改变，而仅仅对链表做了与x的比较判断。

最后，把小链表接在大链表上，别忘了把大链表的结尾赋成null。

```
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def partition(self, head, x):
        """
        :type head: ListNode
        :type x: int
        :rtype: ListNode
        """
        dummy1 = l1 = ListNode(0)
        dummy2 = l2 = ListNode(0)
        while head:
            if head.val < x:
                l1.next = head
                l1 = l1.next
            else:
                l2.next = head
                l2 = l2.next
            head = head.next
        l2.next = None
        l1.next = dummy2.next
        return dummy1.next
```
