VSDevelopers, Algorithms Coliseum

Doubly Linked List


/*Copyrights to vsdevelopers.io*/
/*For more programs visit vsdevelopers.io */
/*Java program for CRUD operations on double linked list*/
/*The operations are Insert,Delete,Search, Destroy,Display*/
import java.util.Scanner;

public class VSDDoubleLinkedList {
	static Scanner sc = new Scanner(System.in);

	// Class to hold the structure of nodes
	private static class VSDNode {
		int data;
		VSDNode next;
		VSDNode previous;

		VSDNode(int data) {
			this.data = data;
			this.next = null;
			this.previous = null;
		}
	}

	// Head of Double LinkedList
	static VSDNode head = null;

	// Function to insert element at the beginning of the List
	public static void VSDinsertAtBeginning() {
		System.out.println("Please Enter element to insert:");
		int element = sc.nextInt();
		VSDNode temp = new VSDNode(element);// making use of temporary node to insert
		if (head == null)
			head = temp;// Inserting first element as head
		else {
			temp.next = head;
			head.previous = temp;
			head = temp;// Inserting new element and changing it as head
		}
		VSDprintList();
	}

	// Function to insert element at the end of the List
	public static void VSDinsertAtEnd() {
		System.out.println("Please Enter element to insert:");
		int element = sc.nextInt();
		VSDNode temp = new VSDNode(element);// making use of temporary node to insert
		if (head == null)
			head = temp;// Inserting first element as head
		else {
			VSDNode x = head;// Temporary node to iterate over list and find last node
			while (x.next != null) {
				x = x.next;
			}
			x.next = temp;// Inserting node at end of Double Linked list
			temp.previous = x;
		}
		VSDprintList();
	}

	// Function to insert element at the beginning of the List
	public static void VSDinsertAtMiddle() {
		System.out.println("Please Enter element to insert:");
		int element = sc.nextInt();
		VSDNode temp = new VSDNode(element);// making use of temporary node to insert
		if (head == null)
			head = temp;
		else {
			System.out.println("Please Enter element from Double Linked list to insert after:");
			int num = sc.nextInt();
			VSDNode x = head;// Temporary node to iterate over list and found required node
			int flag = 0;// To mark the presence of given element
			while (x != null) {
				if (x.data == num) {
					flag = 1;
					break;
				}
				x = x.next;
			}
			if (flag == 0)
				System.out.println("The given element is not found in list");
			else {
				// inserting element at required place
				if (x.next.previous != null)
					x.next.previous = temp;
				temp.next = x.next;
				x.next = temp;
				temp.previous = x;
			}
		}
		VSDprintList();
	}

	// Function to delete element from the list
	public static void VSDdelete() {
		if (head == null)// Checking if the list is null
			System.out.println("Double Linked list is Empty!!!");
		else {
			System.out.println("Enter element to delete");
			int num = sc.nextInt();
			int flag = 0;// To mark the presence of element
			if (head.data == num) {
				// If given element matches with head
				head.next.previous = null;
				head = head.next;
				flag = 1;
			} else {
				// Iterating over list to find the given element
				VSDNode x = head;
				while (x != null) {
					if (x.data == num) {
						if (x.next == null)
							x.previous.next = x.next;
						else {
							x.previous.next = x.next;
							x.next.previous = x.previous;
						}
						flag = 1;
						break;
					} else
						x = x.next;

				}
				if (flag != 1)
					System.out.println("The given element is not found");
			}
			VSDprintList();
		}

	}

	// Function to search element in the list
	public static boolean VSDsearch(int element) {
		boolean b = false;
		VSDNode x = head;
		while (x != null) {
			if (x.data == element) {
				b = true;
				break;
			}
			x = x.next;
		}
		return b;

	}

	// Function to destroy Double Linked List
	public static void VSDdestroy() {
		head = null;
		System.out.println("Linked List is destroyed");
		VSDuserChoice();
	}

	// Function to print the Double Linked List
	public static void VSDprintList() {

		if (head == null)
			System.out.println("Double Linked list is Empty!!!");
		else {
			System.out.println("Now the Double Linked List is");
			VSDNode x = head;
			while (x != null) {
				System.out.print(x.data + "\t");
				x = x.next;
			}
			System.out.println();
		}

	}

	// Function to take user input for performing opearations
	public static void VSDuserInput() {
		System.out.println("Please Enter Double Linked List operation from:");
		System.out.println("Insert-begin,Insert-end,Insert-middle,Display,Delete,Search, Destroy");
		String choice = sc.next();
		switch (choice) {
		case "Insert-begin":
		case "insert-begin":
			VSDinsertAtBeginning();
			break;
		case "Insert-end":
		case "insert-end":
			VSDinsertAtEnd();
			break;
		case "Insert-middle":
		case "insert-middle":
			VSDinsertAtMiddle();
			break;
		case "Display":
		case "display":
			VSDprintList();
			break;
		case "Delete":
		case "delete":
			VSDdelete();
			break;
		case "Search":
		case "search":
			System.out.println("Please Enter element to serach:");
			int element = sc.nextInt();
			if (head == null)
				System.out.println("List is empty!!, Insert elements to search");
			boolean b = VSDsearch(element);
			if (b)
				System.out.println("Element is present in list");
			else
				System.out.println("Element is not present in list ");
			break;

		case "Destroy":
		case "destroy":
			VSDdestroy();
			break;
		}
		VSDuserChoice();
	}

	public static void VSDuserChoice() {
		System.out.println("For performing operations enter y else enter n");
		char ch = sc.next().charAt(0);
		if (ch == 'Y' || ch == 'y')
			VSDuserInput();
		else
			return;
	}

	public static void main(String args[]) {

		VSDuserInput();// Taking user input to perform CRUD operations on Double Linked List

	}
}

loader