class Node {
int num;
Node next;
Node(int num) {
this.num = num;
}
}
public class TestA {
public static void main(String[] args) {
int a[] = { 3, 1, 6, 8, 4, 2, 8, 4 };
TestA tA = new TestA();
Node node = tA.create(7, a);
Node node1 = tA.split(node);
while (node1 != null) {
System.out.print(node1.num);
node1 = node1.next;
}
}
public Node create(int i, int a[]) {
if (i == 0) {
return new Node(a[0]);
}
Node node = new Node(a[i]);
node.next = create(i - 1, a);
return node;
}
public Node split(Node head) {
Node p = head;
Node q = head;
if (q == null || q.next == null) {
return q;
}
while (q.next != null && q.next.next != null) {
p = p.next;
q = q.next.next;
}
Node temp = p.next;
p.next = null;
p = head;
q = temp;
Node p1 = split(p);
Node p2 = split(q);
Node p3 = join(p1, p2);
return p3;
}
private Node join(Node p1, Node p2) {
// TODO Auto-generated method stub
Node head = new Node(0);
Node t = head;
while (p1 != null && p2 != null) {
if (p1.num >= p2.num) {
t.next = p1;
t = t.next;
p1 = p1.next;
} else if (p1.num < p2.num) {
t.next = p2;
t = t.next;
p2 = p2.next;
}
}
if (p1 == null && p2 != null) {
t.next = p2;
} else if (p1 != null && p2 == null) {
t.next = p1;
}
return head.next;
}
}