So this goes like quite similar to Singly Linked List. The difference is that , it has not only the link to the successor, but also to its predecessor. Therefor the problems like taking more time to delete from tail or delete from any location is reduced.
Like the earlier case there are two java classes. one for the node and the other for the implementation.
Node class
So the next will be the implementation. Here I only added the implementations of adding to tail and delete from tail.
Like the earlier case there are two java classes. one for the node and the other for the implementation.
Node class
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class DoublyLLNode { //create variables for info; public int info; public DoublyLLNode next,prev; //two nodes to point successor and predecessor public DoublyLLNode(int x){ //create the constructor this(x,null,null); //first node } public DoublyLLNode(int x,DoublyLLNode n,DoublyLLNode p){ info = x; next = n; prev = p; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public class DoublyLL { protected DoublyLLNode head,tail; /*********Functions************/ public boolean isEmpty(){ return head == null; } public void InserttoTail(int x){ if(!isEmpty()){ tail = new DoublyLLNode(x,head,tail); tail.prev.next = tail; }else head = tail = new DoublyLLNode(x); // only single node } public int deleteFromTail(){ int x = tail.info; if(head == tail) head = tail = null; else{ tail = tail.prev; tail.next = null; } return x; } public static void main(String[] args) { DoublyLL Llist = new DoublyLL(); Llist.InserttoTail(23); System.out.println("Head : " + Llist.head.info); System.out.println("Tail : " + Llist.tail.info); Llist.InserttoTail(27); System.out.println("Head : " + Llist.head.info); System.out.println("Tail : " + Llist.tail.info); } } |