zigzag linked list
public class ZigZagLL {
public class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
public static Node head;
public static Node tail;
public void ZigZag() {
// FIND MID
Node slow = head;
Node fast = head.next;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
Node mid = slow;
// 2ND HALF REVERSE
Node curr = mid.next;
mid.next = null;
Node prev = null;
Node next;
while (curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
Node left = head;
Node right = prev;
Node nextL, nextR;
// ALTERNATE MERGING-ZIGZAG
while (left != null && right != null) {
nextL = left.next;
left.next = right;
nextR = right.next;
right.next = nextL;
left = nextL;
right = nextR;
}
}
public void addFirst(int data) {
Node newNode = new Node(data);
newNode.next = head;
head = newNode;
}
public void print() {
Node temp = head;
while (temp != null) {
System.out.print(temp.data+" ");
temp = temp.next;
}
System.out.println();
}
public static void main(String[] args) {
ZigZagLL ll = new ZigZagLL();
ll.addFirst(6);
ll.addFirst(5);
ll.addFirst(4);
ll.addFirst(3);
ll.addFirst(2);
ll.addFirst(1);
ll.print();
ll.ZigZag();
ll.print();
}
}
Comments
Post a Comment