//package com.college.datastructure;
import java.util.Scanner;
// Singly Node Class
class SinglyNode {
private int
data;
private
SinglyNode link;
SinglyNode() {
data
= 0;
link
= null;
}
SinglyNode(int
d, SinglyNode n) {
data
= d;
link
= n;
}
public void
setLink(SinglyNode n) {
link
= n;
}
public
SinglyNode getLink() {
return
link;
}
public void
setData(int d) {
data
= d;
}
public int
getData() {
return
data;
}
}
// Singly Linked List Class Implementation
class SinglyLinkedList {
private static
SinglyNode start = null;
private static
int size;
public
SinglyLinkedList() {
start
= null;
size
= 0;
}
public int
getSize() {
return
size;
}
public int
insertAtBegin(int val) {
SinglyNode
nPtr = new SinglyNode(val, null);
if(start
== null) {
start =
nPtr;
size++;
return
val;
}
nPtr.setLink(start);
start =
nPtr;
size++;
return val;
}
public int
insertAtEnd(int val) {
SinglyNode
nPtr = new SinglyNode(val, null);
SinglyNode
temp = start;
if(start
== null) {
return insertAtBegin(val);
}
while(temp.getLink()!= null)
temp =
temp.getLink();
temp.setLink(nPtr);
nPtr.setLink(null);
size++;
return val;
}
public int
insertAtPos(int val, int pos) {
SinglyNode nPtr = new SinglyNode(val, null);
SinglyNode
ptr = start;
if(pos >
size || pos <= 0)
return
-1;
if(pos ==
1) {
return
insertAtBegin(val);
}
for(int
i=1; i<size; i++) {
if(i ==
pos-1) {
nPtr.setLink(ptr.getLink());
ptr.setLink(nPtr);
break;
} else
ptr
= ptr.getLink();
}
size++;
return val;
}
public int
deleteAtStart() {
if(start ==
null) {
return
-1;
}
int data =
start.getData();
start =
start.getLink();
size--;
return
data;
}
public int
deleteAtEnd() {
if(start ==
null) {
return
-1;
}
SinglyNode
ptr = start;
while((ptr.getLink()).getLink() != null)
ptr =
ptr.getLink();
int data =
ptr.getLink().getData();
ptr.setLink(null);
size--;
return
data;
}
public int
deleteAtPos(int pos) {
if(pos >
size || pos <= 0) {
return
-1;
}
if(pos ==
1) {
return
deleteAtStart();
}
if(pos ==
size) {
return
deleteAtEnd();
}
SinglyNode
ptr = start;
int data =
0;
for(int
i=1; i<size; i++) {
if(i ==
pos-1) {
data = ptr.getLink().getData();
SinglyNode temp = ptr.getLink();
ptr.setLink(temp.getLink());
}
ptr =
ptr.getLink();
}
size--;
return
data;
}
public int
deleteByData(int data) {
SinglyNode
ptr = start;
if(ptr ==
null) {
return
-1;
}
int i = 1;
while(true)
{
if(ptr.getData() == data) {
return deleteAtPos(i);
}
ptr =
ptr.getLink();
i++;
}
}
public void
display() {
if(start ==
null) {
System.out.println(" List is Empty. ");
return
;
}
SinglyNode
ptr = start;
System.out.println(" List Items are : \n");
while(ptr
!= null) {
System.out.print(" ->
" + ptr.getData());
ptr =
ptr.getLink();
}
System.out.println("");
}
}
// Main Class
public class SinglyLinkedListImp {
public static
void main(String[] ar) {
Scanner
input = new Scanner(System.in);
SinglyLinkedList singlyLinkedList = new SinglyLinkedList();
int ch, value,
pos;
while(true)
{
System.out.println("\n 1. Insert At Front \t 2. Insert At Rear \n
3. Insert At Pos \t 4. Delete At Begin \n 5. Delete At End \t 6. Delete At
Position \n 7. Delete By Data \t 8. Size \n 9. Display \n Press '0' For
Exit.");
System.out.print("\n Enter your choice : ");
ch =
input.nextInt();
switch(ch) {
case 0:
return;
case 1:
//1. Insert At Front
System.out.print("\n Enter value : ");
value = input.nextInt();
int insertAtBegin = singlyLinkedList.insertAtBegin(value);
System.out.println(" Item " +
insertAtBegin + " inserted.");
break;
case 2:
//2. Insert At Rear
System.out.print("\n Enter value : ");
value = input.nextInt();
int insertAtEnd = singlyLinkedList.insertAtEnd(value);
System.out.println(" Item " + insertAtEnd + "
inserted.");
break;
case 3:
//3. Insert At Pos
System.out.print("\n Enter position : ");
pos = input.nextInt();
System.out.print(" Enter value : ");
value = input.nextInt();
int insertAtPos = singlyLinkedList.insertAtPos(value, pos);
if(insertAtPos < 0) {
System.out.println(" Position not Available ");
break;
}
System.out.println(" Item " + insertAtPos + " inserted at
Position " + pos);
break;
case 4:
//4. Delete At Begin
int deleteAtStart = singlyLinkedList.deleteAtStart();
if(deleteAtStart < 0) {
System.out.println("\n List is Empty.");
break;
}
System.out.println("\n Item " + deleteAtStart + "
deleted.");
break;
case 5:
//5. Delete At End
int deleteAtEnd = singlyLinkedList.deleteAtEnd();
if(deleteAtEnd < 0) {
System.out.println("\n List is Empty.");
break;
}
System.out.println("\n Item " + deleteAtEnd + "
deleted.");
break;
case 6:
//6. Delete At Position
System.out.print("\n Enter Position : ");
int deleteAtPos = singlyLinkedList.deleteAtPos(input.nextInt());
if(deleteAtPos < 0) {
System.out.println(" Either list is empty or invalid position.
");
break;
}
System.out.println(" Item " + deleteAtPos + "
deleted.");
break;
case 7:
//7. Delete By Data
System.out.print("\n Enter Data : ");
int data = input.nextInt();
int deleteByData = singlyLinkedList.deleteByData(data);
if(deleteByData < 0)
System.out.println(" List is Empty.");
else
System.out.println(" Item " + deleteByData + " Deleted
");
break;
case 8:
//9. Size
int size = singlyLinkedList.getSize();
if(size < 0)
System.out.println(" List is Empty. ");
else
System.out.println(" Size of List : " + size);
break;
case 9:
//9. Display
singlyLinkedList.display();
break;
default:
System.out.println("\n Wrong Choice Entered...!");
}
}
}
}