470 lines
10 KiB
Java
470 lines
10 KiB
Java
/*This is a Java Program to implement a Sorted Singly Linked List. A linked list is a data structure consisting of a group of nodes which together represent a sequence. Under the simplest form, each node is composed of a data and a reference (in other words, a link) to the next node in the sequence. This structure allows for efficient insertion or removal of elements from any position in the sequence. In a sorted singly linked list each node has only one link pointing to the next node and insertion of an element into the list is done in a sorted fashion.*/
|
|
|
|
/*
|
|
* Java Program to Implement Sorted Singly Linked List
|
|
*/
|
|
|
|
import java.util.Scanner;
|
|
|
|
/* Class Node */
|
|
class Node
|
|
{
|
|
protected int data;
|
|
protected Node link;
|
|
|
|
/* Constructor */
|
|
public Node()
|
|
{
|
|
link = null;
|
|
data = 0;
|
|
}
|
|
/* Constructor */
|
|
public Node(int d,Node n)
|
|
{
|
|
data = d;
|
|
link = n;
|
|
}
|
|
/* Function to set link to next Node */
|
|
public void setLink(Node n)
|
|
{
|
|
link = n;
|
|
}
|
|
/* Function to set data to current Node */
|
|
public void setData(int d)
|
|
{
|
|
data = d;
|
|
}
|
|
/* Function to get link to next node */
|
|
public Node getLink()
|
|
{
|
|
return link;
|
|
}
|
|
/* Function to get data from current Node */
|
|
public int getData()
|
|
{
|
|
return data;
|
|
}
|
|
}
|
|
class linkedList
|
|
{
|
|
protected Node start;
|
|
public int size;
|
|
public linkedList()
|
|
{
|
|
start=null;
|
|
size = 0;
|
|
}
|
|
/* Function to check if list is empty */
|
|
public boolean isEmpty()
|
|
{
|
|
return start == null;
|
|
}
|
|
/* Function to check size of list */
|
|
public int getSize()
|
|
{
|
|
return size;
|
|
}
|
|
/* Function to insert an element */
|
|
public void insert(int val)
|
|
{
|
|
Node nptr, ptr, tmp = null;
|
|
nptr = new Node(val, null);
|
|
boolean ins = false;
|
|
if (start == null)
|
|
start = nptr;
|
|
else if (val <= start.getData())
|
|
{
|
|
nptr.setLink(start);
|
|
start = nptr;
|
|
}
|
|
else
|
|
{
|
|
tmp = start;
|
|
ptr = start.getLink();
|
|
while(ptr != null)
|
|
{
|
|
if (val >= tmp.getData() && val <= ptr.getData())
|
|
{
|
|
tmp.setLink(nptr);
|
|
nptr.setLink(ptr);
|
|
ins = true;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
tmp = ptr;
|
|
ptr = ptr.getLink();
|
|
}
|
|
}
|
|
if (ins == false)
|
|
{
|
|
tmp.setLink(nptr);
|
|
}
|
|
}
|
|
size++;
|
|
}
|
|
/* Function to delete an element at position */
|
|
public void deleteAtPos(int pos)
|
|
{
|
|
if (pos == 1)
|
|
{
|
|
start = start.getLink();
|
|
size--;
|
|
return ;
|
|
}
|
|
if (pos == size)
|
|
{
|
|
Node ptr = start;
|
|
for (int i = 1; i < size - 1; i++)
|
|
ptr = ptr.getLink();
|
|
ptr.setLink(null);
|
|
size --;
|
|
return;
|
|
}
|
|
Node ptr = start;
|
|
pos = pos - 1 ;
|
|
for (int i = 1; i < size - 1; i++)
|
|
{
|
|
if (i == pos)
|
|
{
|
|
Node tmp = ptr.getLink();
|
|
tmp = tmp.getLink();
|
|
ptr.setLink(tmp);
|
|
break;
|
|
}
|
|
ptr = ptr.getLink();
|
|
}
|
|
size-- ;
|
|
}
|
|
/* Function to display elements */
|
|
public void display()
|
|
{
|
|
System.out.print("Sorted Singly Linked List = ");
|
|
if (size == 0)
|
|
{
|
|
System.out.print("empty\n");
|
|
return;
|
|
}
|
|
if (start.getLink() == null)
|
|
{
|
|
System.out.println(start.getData() );
|
|
return;
|
|
}
|
|
Node ptr = start;
|
|
System.out.print(start.getData()+ "->");
|
|
ptr = start.getLink();
|
|
while (ptr.getLink() != null)
|
|
{
|
|
System.out.print(ptr.getData()+ "->");
|
|
ptr = ptr.getLink();
|
|
}
|
|
System.out.print(ptr.getData()+ "\n");
|
|
}
|
|
}
|
|
public class SortedSinglyLinkedList
|
|
{
|
|
public static void main(String[] args)
|
|
{
|
|
Scanner scan = new Scanner(System.in);
|
|
/* Creating object of linkedList */
|
|
linkedList list = new linkedList();
|
|
System.out.println("Sorted Singly Linked List Test\n");
|
|
char ch;
|
|
/* Perform list operations */
|
|
do
|
|
{
|
|
System.out.println("\nSorted Singly Linked List Operations\n");
|
|
System.out.println("1. insert");
|
|
System.out.println("2. delete at position");
|
|
System.out.println("3. check empty");
|
|
System.out.println("4. get size");
|
|
int choice = scan.nextInt();
|
|
switch (choice)
|
|
{
|
|
case 1 :
|
|
System.out.println("Enter integer element to insert");
|
|
list.insert( scan.nextInt() );
|
|
break;
|
|
case 2 :
|
|
System.out.println("Enter position");
|
|
int p = scan.nextInt() ;
|
|
if (p < 1 || p > list.getSize() )
|
|
System.out.println("Invalid position\n");
|
|
else
|
|
list.deleteAtPos(p);
|
|
break;
|
|
case 3 :
|
|
System.out.println("Empty status = "+ list.isEmpty()+"\n");
|
|
break;
|
|
case 4 :
|
|
System.out.println("Size = "+ list.getSize() +" \n");
|
|
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');
|
|
}
|
|
}
|
|
|
|
/*
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
3
|
|
Empty status = true
|
|
|
|
Sorted Singly Linked List = empty
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
24
|
|
Sorted Singly Linked List = 24
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
6
|
|
Sorted Singly Linked List = 6->24
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
19
|
|
Sorted Singly Linked List = 6->19->24
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
94
|
|
Sorted Singly Linked List = 6->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
1
|
|
Sorted Singly Linked List = 1->6->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
7
|
|
Sorted Singly Linked List = 1->6->7->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
1
|
|
Enter integer element to insert
|
|
12
|
|
Sorted Singly Linked List = 1->6->7->12->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
4
|
|
Size = 7
|
|
|
|
Sorted Singly Linked List = 1->6->7->12->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
3
|
|
Sorted Singly Linked List = 1->6->12->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
1
|
|
Sorted Singly Linked List = 6->12->19->24->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
4
|
|
Sorted Singly Linked List = 6->12->19->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
3
|
|
Sorted Singly Linked List = 6->12->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
1
|
|
Sorted Singly Linked List = 12->94
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
2
|
|
Sorted Singly Linked List = 12
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
2
|
|
Enter position
|
|
1
|
|
Sorted Singly Linked List = empty
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
y
|
|
|
|
Sorted Singly Linked List Operations
|
|
|
|
1. insert
|
|
2. delete at position
|
|
3. check empty
|
|
4. get size
|
|
3
|
|
Empty status = true
|
|
|
|
Sorted Singly Linked List = empty
|
|
|
|
Do you want to continue (Type y or n)
|
|
|
|
n |