Skip to content

Instantly share code, notes, and snippets.

@anil477
Last active June 2, 2017 13:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anil477/d008f3d300c9a9f738d69debf7d34466 to your computer and use it in GitHub Desktop.
Save anil477/d008f3d300c9a9f738d69debf7d34466 to your computer and use it in GitHub Desktop.
Doubly Linked List - Basic
// same without static variable
// https://gist.github.com/anil477/9ddf5717431f54a8d2ce53ea13b90c0c
class Node
{
int data;
Node next;
Node previous;
public Node(int data)
{
next = null;
previous = null;
this.data = data;
}
}
class DoublyLinkedList {
int size =0;
Node head = null;
Node tail = null;
public Node addAtStart(int data)
{
System.out.println("Adding Node " + data + " at the start.");
Node newNode = new Node(data);
if(size==0)
{
head = newNode;
tail = newNode;
}
else
{
newNode.next = head;
head.previous = newNode;
head = newNode;
}
size++;
return newNode;
}
public Node addAtEnd(int data)
{
System.out.println("Adding Node " + data + " at the End");
Node newNode = new Node(data);
if(size==0)
{
head = newNode;
tail = newNode;
}
else
{
tail.next = newNode;
newNode.previous = tail;
tail = newNode;
}
size++;
return newNode;
}
public Node addAfter(int data, Node prevNode)
{
if(prevNode==null)
{
System.out.println("Node after which new node to be added cannot be null");
return null;
}
else if(prevNode==tail)
{//check if it a last node
return addAtEnd(data);
}
else
{
System.out.println("Adding node after "+ prevNode.data);
Node newNode = new Node(data);
//store the next node of prevNode
Node nextNode = prevNode.next;
//make new node next points to prevNode
newNode.next = nextNode;
//make prevNode next points to new Node
prevNode.next = newNode;
//make nextNode previous points to new node
nextNode.previous = newNode;
//make new Node previous points to prevNode
newNode.previous = prevNode;
size++;
return newNode;
}
}
public void deleteFromStart()
{
if(size==0)
{
System.out.println("\nList is Empty");
}
else
{
System.out.println("\ndeleting node " + head.data + " from start");
head = head.next;
size--;
}
}
public void deleteFromEnd()
{
if(size==0)
{
System.out.println("\nList is Empty");
}
else if(size==1)
{
deleteFromStart();
}
else
{
int x = tail.data;
tail = tail.previous;
tail.next = null;
System.out.println("\ndeleting node " + x + " from end");
size--;
}
}
public int elementAt(int index)
{
if(index>size)
{
return -1;
}
Node n = head;
while(index-1!=0)
{
n = n.next;
index--;
}
return n.data;
}
//get Size
public int getSize()
{
return size;
}
public void print()
{
Node temp = head;
System.out.print("Doubly Linked List: ");
while(temp!=null)
{
System.out.print(" " + temp.data);
temp = temp.next;
}
System.out.println();
}
public static void main(String[] args)
{
DoublyLinkedList d = new DoublyLinkedList();
Node x = d.addAtStart(2);
d.addAtStart(1);
d.print();
d.addAtEnd(3);
d.print();
d.addAfter(4,x);
d.print();
d.deleteFromStart();
d.print();
System.out.println("Element at index 2: "+d.elementAt(2));
d.addAtStart(1);
d.print();
d.deleteFromEnd();
d.print();
System.out.println("Size of the Linked List: " + d.getSize());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment