Monday, January 25, 2016

Circular Linked List Implementation in Java

package LinkedList;

public class CLLNode {
public int data;
public CLLNode next;

CLLNode(int data){
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public CLLNode getNext() {
return next;
}
public void setNext(CLLNode next) {
this.next = next;
}


}


package LinkedList;

public class CircularLinkedList {
public CLLNode tail;
public int length;

CircularLinkedList() {
tail = null;
length = 0;
}

public void add(int data) {
addToHead(data);
}

public void addToHead(int data) {
CLLNode temp = new CLLNode(data);
if (tail == null) {
tail = temp;
tail.setNext(tail);
} else {
temp.setNext(tail.getNext());
tail.setNext(temp);
}
length += 1;
}

public void addToTail(int data) {
CLLNode temp = new CLLNode(data);
if (tail == null) {
tail = temp;
tail.setNext(tail);
} else {
temp.setNext(tail.getNext());
tail.setNext(temp);
}
tail = tail.getNext();
length += 1;
}

public int peek() {
return tail.getNext().getData();
}

public int tailPeek() {
return tail.getData();
}

public int removeFromHead() {
CLLNode temp = tail.getNext();
if (tail == tail.getNext()) {
tail = null;
} else {
tail.setNext(temp.getNext());
temp.setNext(null);
}
length--;
return temp.getData();
}

public int removeFromTail() {
CLLNode finger = tail;
while (finger.getNext() != tail) {
finger = finger.getNext();
}

CLLNode temp = tail;
if (finger == tail) {
tail = null;
} else {
finger.setNext(tail.getNext());
tail = finger;
}
length--;
return temp.getData();
}

public boolean contains(int data) {
if (tail == null) {
return false;
}
CLLNode finger;
finger = tail.getNext();
while (finger != tail && (!(finger.getData() == data))) {
finger = finger.getNext();
}
return finger.getData() == data;
}

public int remove(int data) {
if (tail == null) {
return Integer.MIN_VALUE;
}
CLLNode finger = tail.getNext();
CLLNode previous = tail;
int compares;
for (compares = 0; compares < length && (!(finger.getData() == data)); compares++) {
previous = finger;
finger = finger.getNext();
}
if (finger.getData() == data) {
if (tail == tail.getNext()) {
tail = null;
} else {
previous.setNext(previous.getNext().getNext());
}
finger.setNext(null);
length--;
return finger.getData();
} else {
return Integer.MIN_VALUE;
}

}

public int size() {
return length;
}

public int lenght() {
return length;
}

public boolean isEmpty() {
return tail == null;
}

public void clear() {
length = 0;
tail = null;
}

public String toString() {
String result = "[";
if (tail == null) {
return result + "]";
}
result = result + tail.getData();
CLLNode temp = tail.getNext();
while (temp != tail) {
result = result + "," + temp.getData();
temp = temp.getNext();
}
return result + "]";

}
public static void main(String[] args) {
CircularLinkedList obj = new CircularLinkedList();
obj.add(5);
obj.add(6);
obj.add(7);
obj.add(8);
System.out.println("Original CircularLinkedlist"+obj);
System.out.println("tail data:-"+obj.tailPeek());
obj.addToTail(9);
System.out.println("After addition to tail:-"+obj.tailPeek());
System.out.println("After addition to tail CircularLinkedlist"+obj);
}

}

No comments:

Post a Comment