Advertisement
dzocesrce

[APS] Delete Even Duplicates

Aug 26th, 2023
603
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.16 KB | None | 0 0
  1. // 2021 juni - termin 2
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.util.Scanner;
  6.  
  7. class SLLNode<E> {
  8.     protected E element;
  9.     protected SLLNode<E> succ;
  10.  
  11.     public SLLNode(E elem, SLLNode<E> succ) {
  12.         this.element = elem;
  13.         this.succ = succ;
  14.     }
  15.  
  16.     @Override
  17.     public String toString() {
  18.         return element.toString();
  19.     }
  20. }
  21.  
  22. class SLL<E> {
  23.     private SLLNode<E> first;
  24.  
  25.     public SLL() {
  26.         // Construct an empty SLL
  27.         this.first = null;
  28.     }
  29.  
  30.     public void deleteList() {
  31.         first = null;
  32.     }
  33.  
  34.     public int length() {
  35.         int ret;
  36.         if (first != null) {
  37.             SLLNode<E> tmp = first;
  38.             ret = 1;
  39.             while (tmp.succ != null) {
  40.                 tmp = tmp.succ;
  41.                 ret++;
  42.             }
  43.             return ret;
  44.         } else
  45.             return 0;
  46.  
  47.     }
  48.     @Override
  49.     public String toString() {
  50.         String ret = new String();
  51.         if (first != null) {
  52.             SLLNode<E> tmp = first;
  53.             ret += tmp + " ";
  54.             while (tmp.succ != null) {
  55.                 tmp = tmp.succ;
  56.                 ret += tmp + " ";
  57.             }
  58.         } else
  59.             ret = "";
  60.         return ret;
  61.     }
  62.  
  63.     public void insertFirst(E o) {
  64.         SLLNode<E> ins = new SLLNode<E>(o, first);
  65.         first = ins;
  66.     }
  67.  
  68.     public void insertAfter(E o, SLLNode<E> node) {
  69.         if (node != null) {
  70.             SLLNode<E> ins = new SLLNode<E>(o, node.succ);
  71.             node.succ = ins;
  72.         }
  73.     }
  74.  
  75.     public void insertBefore(E o, SLLNode<E> before) {
  76.  
  77.         if (first != null) {
  78.             SLLNode<E> tmp = first;
  79.             if(first==before){
  80.                 this.insertFirst(o);
  81.                 return;
  82.             }
  83.             //ako first!=before
  84.             while (tmp.succ != before)
  85.                 tmp = tmp.succ;
  86.             if (tmp.succ == before) {
  87.                 SLLNode<E> ins = new SLLNode<E>(o, before);
  88.                 tmp.succ = ins;
  89.             } else {
  90.                 System.out.println("Elementot ne postoi vo listata");
  91.             }
  92.         } else {
  93.             System.out.println("Listata e prazna");
  94.         }
  95.     }
  96.     public void insertLast(E o) {
  97.         if (first != null) {
  98.             SLLNode<E> tmp = first;
  99.             while (tmp.succ != null)
  100.                 tmp = tmp.succ;
  101.             SLLNode<E> ins = new SLLNode<E>(o, null);
  102.             tmp.succ = ins;
  103.         } else {
  104.             insertFirst(o);
  105.         }
  106.     }
  107.  
  108.     public E deleteFirst() {
  109.         if (first != null) {
  110.             SLLNode<E> tmp = first;
  111.             first = first.succ;
  112.             return tmp.element;
  113.         } else {
  114.             System.out.println("Listata e prazna");
  115.             return null;
  116.         }
  117.     }
  118.  
  119.     public E delete(SLLNode<E> node) {
  120.         if (first != null) {
  121.             SLLNode<E> tmp = first;
  122.             if(first ==node){
  123.                 return this.deleteFirst();
  124.             }
  125.             while (tmp.succ != node && tmp.succ.succ != null)
  126.                 tmp = tmp.succ;
  127.             if (tmp.succ == node) {
  128.                 tmp.succ = tmp.succ.succ;
  129.                 return node.element;
  130.             } else {
  131.                 return null;
  132.             }
  133.         } else {
  134.             return null;
  135.         }
  136.  
  137.     }
  138.  
  139.     public SLLNode<E> getFirst() {
  140.         return first;
  141.     }
  142.     public SLLNode<E> find(E o) {
  143.         if (first != null) {
  144.             SLLNode<E> tmp = first;
  145.             while (tmp.element != o && tmp.succ != null)
  146.                 tmp = tmp.succ;
  147.             if (tmp.element == o) {
  148.                 return tmp;
  149.             }
  150.         }
  151.         return first;
  152.     }
  153. }
  154.  
  155. public class DeleteEvenDuplicates {
  156.     public static void deleteEven(SLL<Integer> list1) {
  157.         //todo: enter code here
  158.         SLLNode<Integer> i= list1.getFirst();
  159.         SLLNode<Integer> j= list1.getFirst();
  160.         int counter=0;
  161.  
  162.         while(i!=null){
  163.             int broj= i.element;
  164.             j=list1.getFirst();
  165.             counter=0;
  166.             while(j!=null){
  167.                 if(j.element==broj) counter++;
  168.                 j=j.succ;
  169.             }
  170.             if(counter>0&&counter%2==0){
  171.                 j= list1.getFirst();
  172.                 while(j!=null){
  173.                     if(j.element==broj){
  174.                         list1.delete(j);
  175.                     }
  176.                     j=j.succ;
  177.                 }
  178.             }
  179.  
  180.             i=i.succ;
  181.         }
  182.  
  183.     }
  184.  
  185.     public static void main(String[] args) {
  186.         Scanner scanner = new Scanner(System.in);
  187.         int n = Integer.parseInt(scanner.nextLine());
  188.         SLL<Integer> list1 = new SLL<Integer>();
  189.  
  190.         //todo: enter code here
  191.         String[] niza= scanner.nextLine().split("\\s+");
  192.         for(int i=0;i<n;i++){
  193.             list1.insertLast(Integer.parseInt(niza[i]));
  194.         }
  195.  
  196.  
  197.         deleteEven(list1);
  198.         //todo: enter code here
  199.         System.out.println(list1.toString());
  200.     }
  201. }
  202.  
  203. /*
  204. Test
  205. 9
  206. 1 10 2 3 5 2 10 3 3
  207.  
  208. 1 3 5 3 3
  209.  
  210. Test
  211. 10
  212. 15 3 15 2 4 9 3 15 8 15
  213.  
  214. 2 4 9 8
  215. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement