Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
336 changes: 230 additions & 106 deletions DataStructures/LinkedList.java
Original file line number Diff line number Diff line change
@@ -1,123 +1,247 @@
package DataStructures;

import java.util.Scanner;

public class LinkedList {

private Node head;
static class Node {
Node next;
int data;
public Node(int data) {
this.data = data;
next = null;
}

/* Class Node */
class Node
{
public int data;
public 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;
}

public void print() {
Node node = head;
while(node != null) {
System.out.print(node.data + "\t");
node = node.next;
}
}

/* Class linkedList */
class linkedList
{
public Node start;
public Node end ;
public int size ;

/* Constructor */
public linkedList()
{
start = null;
end = null;
size = 0;
}

private void insertFront(int new_data) {
Node newNode = new Node(new_data);
if (head == null) {
head = newNode;
return;
}
newNode.next = head;
head = newNode;
/* Function to check if list is empty */
public boolean isEmpty()
{
return start == null;
}

private void insertBetween(int new_data, Node prevNode, Node nextNode) {
Node newNode = new Node(new_data);
if (head == null || prevNode == null) {
head = newNode;
return;
/* Function to get size of list */
public int getSize()
{
return size;
}
/* Function to insert an element at begining */
public void insertAtStart(int val)
{
Node nptr = new Node(val, null);
size++ ;
if(start == null)
{
start = nptr;
end = start;
}
else
{
nptr.setLink(start);
start = nptr;
}
prevNode.next = newNode;
newNode.next = nextNode;
}

private void insertEnd(int new_data) {
Node newNode = new Node(new_data);
if (head == null) {
head = newNode;
return;
/* Function to insert an element at end */
public void insertAtEnd(int val)
{
Node nptr = new Node(val,null);
size++ ;
if(start == null)
{
start = nptr;
end = start;
}
Node temp = head;
while (temp.next != null) {
temp = temp.next;
else
{
end.setLink(nptr);
end = nptr;
}
temp.next = newNode;
newNode.next = null;
}

private void search(int data) {
Node key = head;
if (head.data == data) {
System.out.println("Key Node: " + head.data);
/* Function to insert an element at position */
public void insertAtPos(int val , int pos)
{
Node nptr = new Node(val, null);
Node ptr = start;
pos = pos - 1 ;
for (int i = 1; i < size; i++)
{
if (i == pos)
{
Node tmp = ptr.getLink() ;
ptr.setLink(nptr);
nptr.setLink(tmp);
break;
}
ptr = ptr.getLink();
}
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 s = start;
Node t = start;
while (s != end)
{
t = s;
s = s.getLink();
}
end = t;
end.setLink(null);
size --;
return;
}
while(key.data != data) {
key = key.next;
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();
}
System.out.println("Search Node Data is " + key.data);
}

public void delete(int data) {
Node temp = head, prev = null;
if (temp != null && temp.data == data) {
head = temp.next;
size-- ;
}
/* Function to display elements */
public void display()
{
System.out.print("\nSingly Linked List = ");
if (size == 0)
{
System.out.print("empty\n");
return;
}
if (start.getLink() == null)
{
System.out.println(start.getData() );
return;
}
while(temp != null && temp.data != data) {
prev = temp;
temp = temp.next;
Node ptr = start;
System.out.print(start.getData()+ "->");
ptr = start.getLink();
while (ptr.getLink() != null)
{
System.out.print(ptr.getData()+ "->");
ptr = ptr.getLink();
}
if (temp == null) return;
prev.next = temp.next;
}

public static void main(String args[]) {
Scanner s = new Scanner(System.in);
LinkedList list = new LinkedList();
list.head = new Node(s.nextInt());
Node secondNode = new Node(s.nextInt());
Node thirdNode = new Node(s.nextInt());

list.head.next = secondNode;
secondNode.next = thirdNode;
thirdNode.next = null;
list.print();
System.out.println();

System.out.println("Insert Data in Front...");
list.insertFront(s.nextInt());
list.print();
System.out.println();

System.out.println("Insert Data in between...");
list.insertBetween(s.nextInt(), secondNode, thirdNode);
list.print();
System.out.println();

System.out.println("Insert Data at end...");
list.insertEnd(s.nextInt());
list.print();
System.out.println();

System.out.println("Search Data...");
list.search(s.nextInt());
//list.print();
System.out.println();

System.out.println("Delete Node...");
list.delete(s.nextInt());
list.print();
System.out.println();
System.out.print(ptr.getData()+ "\n");
}
}

/* Class SinglyLinkedList */
public class SinglyLinkedList
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
/* Creating object of class linkedList */
linkedList list = new linkedList();
System.out.println("Singly Linked List Test\n");
char ch;
/* Perform list operations */
do
{
System.out.println("\nSingly Linked List Operations\n");
System.out.println("1. insert at begining");
System.out.println("2. insert at end");
System.out.println("3. insert at position");
System.out.println("4. delete at position");
System.out.println("5. check empty");
System.out.println("6. get size");
int choice = scan.nextInt();
switch (choice)
{
case 1 :
System.out.println("Enter integer element to insert");
list.insertAtStart( scan.nextInt() );
break;
case 2 :
System.out.println("Enter integer element to insert");
list.insertAtEnd( scan.nextInt() );
break;
case 3 :
System.out.println("Enter integer element to insert");
int num = scan.nextInt() ;
System.out.println("Enter position");
int pos = scan.nextInt() ;
if (pos <= 1 || pos > list.getSize() )
System.out.println("Invalid position\n");
else
list.insertAtPos(num, pos);
break;
case 4 :
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 5 :
System.out.println("Empty status = "+ list.isEmpty());
break;
case 6 :
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');
}
}