Advertisement
dzocesrce

[APS] Delete 1, Keep 1 More than Before

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