Given 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.
For example,
Given 1->4->3->2->5->2->null and x = 3,
return 1->2->2->4->3->5->null.
Have you met this question in a real interview? Yes
Example
Tags Expand
Related Problems Expand
Timer Expand
You have exceeded the time limit
解题要点 :
哑节点的使用; Dummy
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param head: The first node of linked list.
* @param x: an integer
* @return: a ListNode
*/
public ListNode partition(ListNode head, int x) {
// write your code here
ListNode leftDummy = new ListNode(0);
ListNode rightDummy = new ListNode(0);
ListNode node = head;
ListNode left = leftDummy;
ListNode right = rightDummy;
while(node!=null){
if (node.val<x) {
left.next=node;
left=left.next;
}else{
right.next =node;
right = right.next;
}
node=node.next;
}
right.next=null;
left.next=rightDummy.next;
return leftDummy.next;
}
}