In: Computer Science
In JAVA:
Create a circular doubly linked list. It need not be generic. Implement addToStart and addToEnd methods, as well as printList method. Implement delete(Node n) method that deletes a node n, if n is in the linked list. Make no assumptions about n. Test your linked list.
/*
This program will create a circular doubly linked list.
Intially the list is empty and user need to add elements to create the list
For that the program provided with 4 options as below :
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
You need to select 1 or 2 options to add elements first and then you can perform operation 3 an 4 .
The program will also print list after every operation perform to see the output
*/
import java.util.Scanner;
/* Class Node */
class Node
{
protected int data;
protected Node next,
prev;
/* Constructor */
public Node()
{
next
= null;
prev
= null;
data
= 0;
}
/* Constructor */
public Node(int d, Node n,
Node p)
{
data
= d;
next
= n;
prev
= p;
}
/* Function to set link to
next node */
public void setLinkNext(Node
n)
{
next
= n;
}
/* Function to set link to
previous node */
public void setLinkPrev(Node
p)
{
prev
= p;
}
/* Funtion to get link to
next node */
public Node
getLinkNext()
{
return next;
}
/* Function to get link to
previous node */
public Node
getLinkPrev()
{
return prev;
}
/* Function to set data to
node */
public void setData(int
d)
{
data
= d;
}
/* Function to get data from
node */
public int getData()
{
return data;
}
}
/* Class linkedList */
class linkedList
{
protected Node start;
protected Node end ;
public int size;
/* Constructor */
public linkedList()
{
start
= null;
end =
null;
size
= 0;
}
/* Function to check if list
is empty */
public boolean
isEmpty()
{
return start == null;
}
/* Function to get size of
list */
public int getSize()
{
return size;
}
/* Function to insert element
at begining */
public void addToStart(int
val)
{
Node
nptr = new Node(val, null, null);
if
(start == null)
{
nptr.setLinkNext(nptr);
nptr.setLinkPrev(nptr);
start = nptr;
end =
start;
}
else
{
nptr.setLinkPrev(end);
end.setLinkNext(nptr);
start.setLinkPrev(nptr);
nptr.setLinkNext(start);
start = nptr;
}
size++ ;
}
/*Function to insert element
at end */
public void addToEnd(int
val)
{
Node
nptr = new Node(val, null,
null);
if
(start == null)
{
nptr.setLinkNext(nptr);
nptr.setLinkPrev(nptr);
start = nptr;
end = start;
}
else
{
nptr.setLinkPrev(end);
end.setLinkNext(nptr);
start.setLinkPrev(nptr);
nptr.setLinkNext(start);
end = nptr;
}
size++;
}
/* Function to delete node
at position */
public void deleteNode(int
node)
{
if
(node == 1)
{
if (size == 1)
{
start = null;
end = null;
size = 0;
return;
}
start = start.getLinkNext();
start.setLinkPrev(end);
end.setLinkNext(start);
size--;
return ;
}
if
(node == size)
{
end = end.getLinkPrev();
end.setLinkNext(start);
start.setLinkPrev(end);
size-- ;
}
Node
ptr = start.getLinkNext();
for
(int i = 2; i <= size; i++)
{
if (i == node)
{
Node p = ptr.getLinkPrev();
Node n = ptr.getLinkNext();
p.setLinkNext(n);
n.setLinkPrev(p);
size-- ;
return;
}
ptr = ptr.getLinkNext();
}
}
/* Function to display status
of list */
public void display()
{
System.out.print("\nCircular Doubly Linked List = ");
Node
ptr = start;
if
(size == 0)
{
System.out.print("empty\n");
return;
}
if
(start.getLinkNext() == start)
{
System.out.print(start.getData()+ " <-> "+ptr.getData()+
"\n");
return;
}
System.out.print(start.getData()+ " <-> ");
ptr =
start.getLinkNext();
while
(ptr.getLinkNext() != start)
{
System.out.print(ptr.getData()+ " <-> ");
ptr = ptr.getLinkNext();
}
System.out.print(ptr.getData()+ " <-> ");
ptr =
ptr.getLinkNext();
System.out.print(ptr.getData()+ "\n");
}
}
/* Main Class to create CircularDoublyLinkedList
*/
public class CircularDoublyLinkedList
{
public static void
main(String[] args)
{
Scanner scan = new Scanner(System.in);
/*
Creating object of linkedList */
linkedList list = new linkedList();
System.out.println("Circular Doubly Linked List
Test\n");
char
ch;
/*
Perform list operations to add removed elements in linkedlist
*/
do
{
System.out.println("\nInitial List is empty
");
System.out.println("\nPlease select below options to perform
operation on Circular Doubly Linked List\n");
System.out.println("1. insert at start");
System.out.println("2. insert at end");
System.out.println("3. delete at position(node)");
System.out.println("4. print list");
int choice =
scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter integer element to add");
list.addToStart( scan.nextInt()
);
break;
case 2 :
System.out.println("Enter integer element to add");
list.addToEnd( scan.nextInt() );
break ;
case 3 :
System.out.println("Enter position");
int p = scan.nextInt() ;
if (p < 1 || p > list.getSize() )
System.out.println("Invalid position\n");
else
list.deleteNode(p);
break;
case 4 :
System.out.println(list);
break;
default :
System.out.println("Wrong Entry \n ");
break;
}
/* Display List */
list.display();
System.out.println("\nDo you want to continue (Type y or n)
\n");
ch =
scan.next().charAt(0);
}
while (ch == 'Y'|| ch ==
'y');
}
}
//Output
Circular Doubly Linked List Test
Initial List is empty
Please select below options to perform operation on Circular Doubly Linked List
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
1
Enter integer element to add
22
Circular Doubly Linked List = 22 <-> 22
Do you want to continue (Type y or n)
y
Initial List is empty
Please select below options to perform operation on Circular Doubly Linked List
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
2
Enter integer element to add
44
Circular Doubly Linked List = 22 <-> 44 <-> 22
Do you want to continue (Type y or n)
y
Initial List is empty
Please select below options to perform operation on Circular Doubly Linked List
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
1
Enter integer element to add
3
Circular Doubly Linked List = 3 <-> 22 <-> 44 <-> 3
Do you want to continue (Type y or n)
y
Initial List is empty
Please select below options to perform operation on Circular Doubly Linked List
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
3
Enter position
2
Circular Doubly Linked List = 3 <-> 44 <-> 3
Do you want to continue (Type y or n)
y
Initial List is empty
Please select below options to perform operation on Circular Doubly Linked List
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
4
car.linkedList@42a57993
Circular Doubly Linked List = 3 <-> 44 <-> 3
Do you want to continue (Type y or n)
y
Initial List is empty
Please select below options to perform operation on Circular Doubly Linked List
1. insert at start
2. insert at end
3. delete at position(node)
4. print list
5
Wrong Entry
Circular Doubly Linked List = 3 <-> 44 <-> 3
Do you want to continue (Type y or n)