题目:
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 and x = 3,
return 1->2->2->4->3->5.
思路:创建一个存储大结点的链表的伪头,创建一个存储小结点的链表的伪头,从给定链表的头结点开始遍历,小于给定的数就把该结点附加到小结点链表的尾部,否则附加到大结点链表的尾部,最后把大结点的链接到小结点链表的尾部。
具体实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null){
return null;
}
ListNode max = new ListNode(0);
ListNode min = new ListNode(0);
ListNode pmin = min;
ListNode pmax = max;
ListNode p = head;
while(p!=null){
ListNode temp = p;
p = p.next;
temp.next = null;
if(temp.val < x){
pmin.next = temp;
pmin = pmin.next;
}else{
pmax.next = temp;
pmax = pmax.next;
}
}
pmin.next = max.next;
return min.next;
}
}