给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
.
解题思路1:
可将整个链表先分离为两个小的链表。我们建立minList和maxList,分别存储小于x的元素和不小于x的元素。遍历原链表,将其中的元素根据其val分别加入对应的链表。最后将minList的最后一个元素与maxList的链表头相连即可。leftDummy的最后一个元素与rightDummy的链表头相连即可。
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* 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 leftNode = leftDummy;
ListNode rightNode = rightDummy;
while(head != null){
if(head.val < x){
leftNode.next = head;
leftNode = leftNode.next;
}else{
rightNode.next = head;
rightNode = rightNode.next;
}
head = head.next;
}
leftNode.next = rightDummy.next;
rightNode.next = null;
return leftDummy.next;
}
}