Java program to rotate a given Linked list anti clockwise for given no of nodes.
/** * @author vikky.agrawal */ public class LinkedList { Node node = null; public static void main(String[] args) { LinkedList list = new LinkedList(); list.operations(); } public void operations() { this.node = new Node(10); for (int i = 1; i < 6; i++) { add(node, (int) (Math.random() * 100)); } this.rotateACW(node, 8); } /** * Rotate a linked list Anti clock wise for given number of nodes */ public void rotateACW(Node root, int n) { if (root == null || n<=0) { return; } int size=size(root); if(n==size){ //no need to rotate, as it will be the same System.out.println("List after rotating"); print(root); return; } if (n > size) { n=n%size; } System.out.println("List Before rotating"); print(root); Node ptr = root; Node ptr1 = null; while (n-- > 0) { ptr1 = ptr; ptr = ptr.getLink(); } Node temp = ptr; while (temp.getLink() != null) { temp = temp.getLink(); } temp.setLink(root); ptr1.setLink(null); root = ptr; System.out.println("List after rotating"); print(root); } /** * Helper functions for LinkedList */ public void add(Node ptr, int data) { if (ptr == null) { System.out.println("Always null ?"); ptr = new Node(data); } else { Node newptr = ptr; while (newptr.getLink() != null) { newptr = newptr.getLink(); } newptr.setLink(new Node(data)); newptr.getLink().setLink(null); } } public void print(Node ptr) { if (ptr == null) { return; } Node ptr1 = ptr; System.out.print(ptr1.getData() + "->"); while ((ptr1 = ptr1.getLink()) != null) { System.out.print(ptr1.getData() + "->"); } System.out.println("/n"); } public int size(Node ptr) { if (ptr == null) { return -1; } Node ptr1 = ptr; int i = 1; while ((ptr1 = ptr1.getLink()) != null) { i++; } return i; } /** * static inner class for LinkedList Data Structure */ private static class Node{ private int data; private Node link; Node(){ } Node(int data){ //mergedList=new Node(); this.setData(data); this.setLink(null); } public int getData(){ return this.data; } public Node getLink(){ return this.link; } public void setData(int data){ this.data=data; } public void setLink(Node link){ this.link=link; } } }
No comments:
Post a Comment