m2skills

Linked List java

May 31st, 2017
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.34 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Scanner;
  3. /**
  4.  * Created by MOHIT on 25-07-2016.
  5.  */
  6. class ListElement{
  7.  
  8.     public int data;
  9.     public ListElement link;
  10.     public ListElement list1,list2;
  11.  
  12.     Scanner sc = new Scanner(System.in);
  13.     //construtor
  14.     ListElement(int data){
  15.         this.data = data;
  16.         this.link = null;
  17.     }
  18.  
  19.     //method to update data in List element
  20.     void updatedata(int data){
  21.         this.data = data;
  22.     }
  23.  
  24.     //method to setup the Link
  25.     void setLink(ListElement node){
  26.         this.link = node;
  27.     }
  28.  
  29.     int getdata(){
  30.         return this.data;
  31.     }
  32.  
  33.     ListElement getNextNode(){
  34.         return this.link;
  35.     }
  36.  
  37.     //method that returns length of list
  38.     int length(){
  39.         ListElement node = this;
  40.         int length_of_list = 1;
  41.  
  42.         if(node == null){
  43.             return 0;
  44.         }
  45.  
  46.         while(node.link != null){
  47.             length_of_list++;
  48.             node = node.getNextNode();
  49.         }
  50.  
  51.         return length_of_list;
  52.     }
  53.  
  54.     ListElement insert(ListElement head,ListElement node,int position){
  55.  
  56.         ListElement previousNode = new ListElement(head.data);
  57.         previousNode.setLink(head.link);
  58.  
  59.         if(head == null){
  60.             return node;
  61.         }
  62.         else{
  63.             int size = length();
  64.             if(position > size+1){
  65.                 System.out.println("Invalid position.");
  66.                 System.out.println("Valid positions are from 0 to " + size);
  67.                 return head;
  68.             }
  69.             if(position == 1){
  70.                 node.setLink(head);
  71.                 return node;
  72.             }
  73.             else if(position == 2){
  74.                 ListElement temp = new ListElement(-11);
  75.                 temp.setLink(head.link);
  76.                 head.setLink(node);
  77.                 node.setLink(temp.getNextNode());
  78.             }
  79.             else{
  80.                 int pos = 1;
  81.                 while(pos != position-1){
  82.                     previousNode = previousNode.getNextNode();
  83.                     pos++;
  84.                 }
  85.                 //ListElement temp = head.getNextNode();
  86.  
  87.                 previousNode.setLink(node);
  88.                 node.setLink(null);
  89.             }
  90.         }
  91.         return head;
  92.     }
  93.  
  94.     ListElement insertAtEnd(ListElement node){
  95.         ListElement head = this;
  96.         int size = head.length();
  97.  
  98.         ListElement temp = this;
  99.         while(temp.link!=null){
  100.             temp = temp.getNextNode();
  101.         }
  102.         temp.setLink(node);
  103.         return head;
  104.     }
  105.  
  106.     ListElement deleteByPosition(ListElement head ,int position){
  107.         ListElement previousNode = head;
  108.  
  109.         if(position == 1){
  110.             head = head.getNextNode();
  111.             return head;
  112.         }
  113.         else{
  114.             int pos = 1;
  115.             while(pos != position-1){
  116.                 previousNode = previousNode.getNextNode();
  117.                 pos++;
  118.             }
  119.             ListElement currentNode = previousNode.getNextNode();
  120.             previousNode.setLink(currentNode.getNextNode());
  121.             currentNode.setLink(null);
  122.             currentNode = null;
  123.         }
  124.  
  125.         return head;
  126.     }
  127.  
  128.     ListElement deleteByData(ListElement head , int data){
  129.         ListElement previousNode = head;
  130.         ListElement currentNode = head;
  131.         if(data == currentNode.data){
  132.             head.setLink(currentNode.getNextNode());
  133.  
  134.         }
  135.         else{
  136.             while(data != currentNode.data){
  137.                 previousNode = currentNode;
  138.                 currentNode = currentNode.getNextNode();
  139.             }
  140.             previousNode.setLink(currentNode.getNextNode());
  141.             currentNode.setLink(null);
  142.             currentNode = null;
  143.         }
  144.         return head;
  145.     }
  146.  
  147.     void display(ListElement head){
  148.         ListElement node = head;
  149.         int position = 1;
  150.         while(node!= null){
  151.             System.out.println("Position " + position + " = " + node.data);
  152.             position++;
  153.             node = node.getNextNode();
  154.         }
  155.     }
  156.  
  157.     ListElement reverse(){
  158.         ListElement head = this;
  159.         int size = head.length();
  160.         int[] stack = new int[size];
  161.         int i=0;
  162.         ListElement temp = this;
  163.         while(temp.link != null){
  164.             stack[i] = temp.data;
  165.             i++;
  166.             temp = temp.getNextNode();
  167.         }
  168.         stack[i] = temp.data;
  169.  
  170.         int pos = 2;
  171.         ListElement start = new ListElement(stack[i]);
  172.         for(int j=size-1 ; j>0 ; j--){
  173.             ListElement node = new ListElement(j);
  174.             insert(start,node,pos);
  175.             pos++;
  176.         }
  177.         return start;
  178.     }
  179.  
  180.     int findElement(int data){
  181.         ListElement node = new ListElement(this.data);
  182.         node.setLink(this.link);
  183.         boolean isPresent = false;
  184.         int position = 1;
  185.         while(!isPresent){
  186.             if(node.data == data){
  187.                 isPresent = true;
  188.             }
  189.             else{
  190.                 if(node.getNextNode()!= null){
  191.                     node = node.getNextNode();
  192.                     position++;
  193.                 }
  194.                 else{
  195.                     break;
  196.                 }
  197.             }
  198.         }
  199.  
  200.         if(isPresent){
  201.             return position;
  202.         }
  203.         else{
  204.             return -1;
  205.         }
  206.     }
  207.  
  208.     int getElement(int position){
  209.         ListElement node = new ListElement(this.data);
  210.         node.setLink(this.link);
  211.  
  212.         int size = this.length();
  213.         if(size < position){
  214.             return -1111;
  215.         }
  216.         else {
  217.             int pos = 1;
  218.             while (pos != position) {
  219.                 node = node.getNextNode();
  220.                 pos++;
  221.             }
  222.             return node.data;
  223.         }
  224.     }
  225.  
  226.     int[] convertToArray(){
  227.         ListElement head = this;
  228.         int size = head.length();
  229.         int[] list = new int[size];
  230.         int position = 0;
  231.         while(head.link != null){
  232.             list[position] = head.data;
  233.             position++;
  234.             head = head.getNextNode();
  235.         }
  236.         list[position] = head.data;
  237.  
  238.         return list;
  239.     }
  240.  
  241.     int findMax(){
  242.         ListElement node = new ListElement(this.data);
  243.         node.setLink(this.link);
  244.  
  245.         int max = 0;
  246.         while(true){
  247.  
  248.             if(max < node.data){
  249.                 max = node.data;
  250.             }
  251.             if(node.getNextNode()!= null){
  252.                 node = node.getNextNode();
  253.             }
  254.             else{
  255.                 break;
  256.             }
  257.         }
  258.         return max;
  259.     }
  260.  
  261.     int findMin(){
  262.         ListElement node = new ListElement(this.data);
  263.         node.setLink(this.link);
  264.  
  265.         int min = node.data;
  266.         while(true){
  267.  
  268.             if(min > node.data){
  269.                 min = node.data;
  270.             }
  271.             if(node.getNextNode()!= null){
  272.                 node = node.getNextNode();
  273.             }
  274.             else{
  275.                 break;
  276.             }
  277.         }
  278.         return min;
  279.     }
  280.  
  281.     ListElement makeDummyList() {
  282.         ListElement head = this;
  283.         for(int i=2 ; i < 10 ; i++){
  284.             ListElement node = new ListElement(i);
  285.             head.insert(head,node,i);
  286.         }
  287.         return head;
  288.     }
  289.  
  290.     int countOccurences(int data) {
  291.         int count = 0;
  292.         ListElement head = this;
  293.         while(head.link != null){
  294.             if(head.data == data){
  295.                 count++;
  296.             }
  297.             head = head.getNextNode();
  298.         }
  299.         if(head.data == data){
  300.             count++;
  301.         }
  302.         return count;
  303.     }
  304.  
  305.     ListElement pop(){
  306.         ListElement head = this;
  307.         if(head.link == null){
  308.             return null;
  309.         }
  310.         else{
  311.             head = head.getNextNode();
  312.             return head;
  313.         }
  314.     }
  315.  
  316.     ListElement recursiveReverse(ListElement previousNode){
  317.         /*ListElement currentNode = this;
  318.         if(currentNode.link != null){
  319.             previousNode = currentNode;
  320.             currentNode.link.recursiveReverse(previousNode,head);
  321.         }
  322.         if(previousNode != null){
  323.             currentNode.link = previousNode;
  324.             previousNode.link = null;
  325.         }*/
  326.         return this;
  327.     }
  328.  
  329. }
  330. public class LinkedList {
  331.  
  332.  
  333.  
  334.     public static void main(String args[]){
  335.         Scanner sc = new Scanner(System.in);
  336.         ListElement head = new ListElement(1);
  337.         head.setLink(null);
  338.         int cont =1;
  339.         head = head.makeDummyList();
  340.         while(cont == 1){
  341.             System.out.println("Program to implement linked list");
  342.             System.out.println("The Following choices are availiable : ");
  343.             System.out.println("1.Insert element in Linked List");
  344.             System.out.println("2.Delete element from Linked List");
  345.             System.out.println("3.Display Linked List");
  346.             System.out.println("4.Display Length of Linked List");
  347.             System.out.println("5.Find element in Linked List");
  348.             System.out.println("6.Get data from a position in Linked List");
  349.             System.out.println("7.find Max and Min from Linked List");
  350.             System.out.println("8.Reverse Linked List");
  351.             System.out.println("9.Convert Linked List to Array");
  352.             System.out.println("10.Insert element at the end");
  353.             System.out.println("11.Count Occurences of an element");
  354.             System.out.println("12.Pop Element from Linked List");
  355.             System.out.println("13.FrontBack Split Linked List");
  356.             System.out.println("0.Exit");
  357.             System.out.print("Enter Your choice :");
  358.  
  359.             int choice = sc.nextInt();
  360.  
  361.             switch(choice){
  362.  
  363.                 case 1:
  364.                     System.out.print("Enter data : ");
  365.                     int data = sc.nextInt();
  366.                     System.out.print("Enter position : ");
  367.                     int position = sc.nextInt();
  368.  
  369.                     ListElement node = new ListElement(data);
  370.                     if(head == null){
  371.                         head = node;
  372.                     }
  373.                     else{
  374.                         int length = head.length();
  375.                         head = head.insert(head,node,position);
  376.                     }
  377.                     break;
  378.  
  379.                 case 2:
  380.                     System.out.println("There are two choices :");
  381.                     System.out.println("1.Delete by data");
  382.                     System.out.println("2.Delete by position");
  383.                     System.out.print("Enter Your choice :");
  384.                     int choices = sc.nextInt();
  385.                     switch (choices){
  386.                         case 1:
  387.                             System.out.print("Enter the data to be deleted : ");
  388.                             int deleteData = sc.nextInt();
  389.                             head = head.deleteByData(head,deleteData);
  390.                             break;
  391.  
  392.                         case 2:
  393.                             System.out.print("Enter position of element to be deleted : ");
  394.                             int pos = sc.nextInt();
  395.                             head = head.deleteByPosition(head, pos);
  396.                             break;
  397.                     }
  398.                     break;
  399.  
  400.                 case 3:
  401.                     head.display(head);
  402.                     break;
  403.  
  404.                 case 4:
  405.                     if(head == null){
  406.                         System.out.println("The Length of Linked List is 0");
  407.                     }
  408.                     else{
  409.                         int length = head.length();
  410.                         System.out.println("The Length of Linked List is " + length);
  411.                     }
  412.  
  413.                     break;
  414.  
  415.                 case 5:
  416.                     System.out.print("Enter the element to be searched : ");
  417.                     int element = sc.nextInt();
  418.                     int pos = head.findElement(element);
  419.                     if(pos == -1){
  420.                         System.out.println("The entered element is not present in the list");
  421.                     }
  422.                     else{
  423.                         System.out.println("The Entered element is found at position " + pos );
  424.                     }
  425.                     break;
  426.  
  427.                 case 6:
  428.                     System.out.print("Enter the position : ");
  429.                     position = sc.nextInt();
  430.                     int ele = head.getElement(position);
  431.                     if(ele == -1111){
  432.                         System.out.println("Invalid position number");
  433.                     }
  434.                     else{
  435.                         System.out.println("The data at position " + position + " is " + ele );
  436.                     }
  437.                     break;
  438.  
  439.                 case 7:
  440.                     int max = head.findMax();
  441.                     int min = head.findMin();
  442.  
  443.                     System.out.println("The Max element is : " + max);
  444.                     System.out.println("The Min element is : " + min);
  445.                     break;
  446.  
  447.                 case 8:
  448.                     ListElement rev = null;
  449.                     rev = head.reverse();
  450.                     rev.display(rev);
  451.                     break;
  452.  
  453.                 case 9:
  454.                     int[] list = head.convertToArray();
  455.                     int length = list.length;
  456.                     for(int i=0 ; i<length ; i++){
  457.                         System.out.println("Position " + i + " = " + list[i]);
  458.                     }
  459.                     break;
  460.  
  461.                 case 10:
  462.                     System.out.print("Enter data : ");
  463.                     data = sc.nextInt();
  464.                     node = new ListElement(data);
  465.                     head.insertAtEnd(node);
  466.                     break;
  467.  
  468.                 case 11:
  469.                     System.out.print("Enter data : ");
  470.                     data = sc.nextInt();
  471.                     int count = head.countOccurences(data);
  472.                     System.out.println("The element " + data + " was found " + count + " times in the Linked list");
  473.                     break;
  474.  
  475.                 case 12:
  476.                     head = head.pop();
  477.                     head.display(head);
  478.                     break;
  479.  
  480.                 case 0:
  481.                         cont = 0;
  482.                         break;
  483.  
  484.             }
  485.         }
  486.     }
  487.  
  488. }
Add Comment
Please, Sign In to add comment