【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。 例如:链表9->0->4->5->1,pivot=3。 调整后链表可以是1->0->4->9->5,也可以是0->1->9->5->4。总之,满 足左部分都是小于3的节点,中间部分都是等于3的节点(本例中这个部分为空),右部分都是大于3的节点即可。对某部分内部的节点顺序不做要求。
public class e13SmallerEqualBigger {
public static Node listPartition1(Node head,int pivot){
Node sH=null;
Node sT=null;
Node eH=null;
Node eT=null;
Node bH=null;
Node bT=null;
while(head!=null){
Node next=head.next;
head.next=null;
if(head.value<pivot){
if (sH==null){
sH=head;
sT=head;
}else{
sT.next=head;
sT=head;
}
}else if (head.value==pivot){
if (eH==null){
eH=head;
eT=head;
}else{
eT.next=head;
eT=head;
}
}else{
if (bH==null){
bH=head;
bT=head;
}else{
bT.next=head;
bT=head;
}
}
head=next;
}
if(sT!=null){
sT.next=eH;
eT=eT==null?sT:eT;
}
if (eT!=null){
eT.next=bH;
}
return sH!=null?sH:eH!=null?eH:bH;
}
public static void printLinkedList(Node head){
System.out.println("Linked LIst: ");
while(head!=null){
System.out.print(head.value+" ");
head=head.next;
}
System.out.println();
}
public static void main(String[] args) {
Node head1 = new Node(7);
head1.next = new Node(9);
head1.next.next = new Node(1);
head1.next.next.next = new Node(8);
head1.next.next.next.next = new Node(5);
head1.next.next.next.next.next = new Node(2);
head1.next.next.next.next.next.next = new Node(5);
printLinkedList(head1);
head1 = listPartition1(head1, 5);
printLinkedList(head1);
}
}