SlavkovB

[АПС] Јуни 2017 термин 2 - листа

Nov 21st, 2018
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.83 KB | None | 0 0
  1. /**(2 термин): Дадена е еднострано поврзана листа од цели броеви. Треба да се изврши бришење на тој начин што прво се остава еден па се брише следниот, па се оставаат два, па се брише следниот, па три итн. се додека е возможно бришење.
  2. Ако листата е празна на излез да се испечати Prazna lista.
  3.  
  4. Влез: број на елементи во листата, самата листа
  5. Излез: листа со избришани јазли
  6.  
  7. Не смее да се користат помошни структури како низи и сл. и не смее да се менуваат вредностите на јазлите.
  8.  
  9. Пример:
  10. Влез:                               Излез:
  11. 7                                   1 9 5 3 0
  12. 1 6 9 5 6 3 0
  13. */
  14.  
  15. //  CODE
  16.  
  17.  
  18. import java.util.Scanner;
  19.  
  20. class SLLNode<E> {
  21.     protected E element;
  22.     protected SLLNode<E> succ;
  23.  
  24.     public SLLNode(E elem, SLLNode<E> succ) {
  25.         this.element = elem;
  26.         this.succ = succ;
  27.     }
  28.  
  29.     @Override
  30.     public String toString() {
  31.         return element.toString();
  32.     }
  33. }
  34.  
  35. class SLL<E> {
  36.     private SLLNode<E> first;
  37.  
  38.     public SLL() {
  39.         // Construct an empty SLL
  40.         this.first = null;
  41.     }
  42.  
  43.     public void deleteList() {
  44.         first = null;
  45.     }
  46.  
  47.     public int length() {
  48.         int ret;
  49.         if (first != null) {
  50.             SLLNode<E> tmp = first;
  51.             ret = 1;
  52.             while (tmp.succ != null) {
  53.                 tmp = tmp.succ;
  54.                 ret++;
  55.             }
  56.             return ret;
  57.         } else
  58.             return 0;
  59.  
  60.     }
  61.  
  62.     @Override
  63.     public String toString() {
  64.         String ret = new String();
  65.         if (first != null) {
  66.             SLLNode<E> tmp = first;
  67.             ret += tmp + " ";
  68.             while (tmp.succ != null) {
  69.                 tmp = tmp.succ;
  70.                 ret += tmp + " ";
  71.             }
  72.         } else
  73.             ret = "Prazna lista!!!";
  74.         return ret;
  75.     }
  76.  
  77.     public void setFirst(SLLNode<E> first) {
  78.         this.first = first;
  79.     }
  80.  
  81.     public void insertFirst(E o) {
  82.         SLLNode<E> ins = new SLLNode<E>(o, first);
  83.         first = ins;
  84.     }
  85.  
  86.     public void insertAfter(E o, SLLNode<E> node) {
  87.         if (node != null) {
  88.             SLLNode<E> ins = new SLLNode<E>(o, node.succ);
  89.             node.succ = ins;
  90.         } else {
  91.             System.out.println("Dadenot jazol e null");
  92.         }
  93.     }
  94.  
  95.     public void insertBefore(E o, SLLNode<E> before) {
  96.  
  97.         if (first != null) {
  98.             SLLNode<E> tmp = first;
  99.             if (first == before) {
  100.                 this.insertFirst(o);
  101.                 return;
  102.             }
  103.             // ako first!=before
  104.             while (tmp.succ != before)
  105.                 tmp = tmp.succ;
  106.             if (tmp.succ == before) {
  107.                 SLLNode<E> ins = new SLLNode<E>(o, before);
  108.                 tmp.succ = ins;
  109.             } else {
  110.                 System.out.println("Elementot ne postoi vo listata");
  111.             }
  112.         } else {
  113.             System.out.println("Listata e prazna");
  114.         }
  115.     }
  116.  
  117.     public void insertLast(E o) {
  118.         if (first != null) {
  119.             SLLNode<E> tmp = first;
  120.             while (tmp.succ != null)
  121.                 tmp = tmp.succ;
  122.             SLLNode<E> ins = new SLLNode<E>(o, null);
  123.             tmp.succ = ins;
  124.         } else {
  125.             insertFirst(o);
  126.         }
  127.     }
  128.  
  129.     public E deleteFirst() {
  130.         if (first != null) {
  131.             SLLNode<E> tmp = first;
  132.             first = first.succ;
  133.             return tmp.element;
  134.         } else {
  135.             System.out.println("Listata e prazna");
  136.             return null;
  137.         }
  138.     }
  139.  
  140.     public E delete(SLLNode<E> node) {
  141.         if (first != null) {
  142.             SLLNode<E> tmp = first;
  143.             if (first == node) {
  144.                 return this.deleteFirst();
  145.             }
  146.             while (tmp.succ != node && tmp.succ.succ != null)
  147.                 tmp = tmp.succ;
  148.             if (tmp.succ == node) {
  149.                 tmp.succ = tmp.succ.succ;
  150.                 return node.element;
  151.             } else {
  152.                 System.out.println("Elementot ne postoi vo listata");
  153.                 return null;
  154.             }
  155.         } else {
  156.             System.out.println("Listata e prazna");
  157.             return null;
  158.         }
  159.  
  160.     }
  161.  
  162.     public SLLNode<E> getFirst() {
  163.         return first;
  164.     }
  165.  
  166.     public SLLNode<E> find(E o) {
  167.         if (first != null) {
  168.             SLLNode<E> tmp = first;
  169.             while (tmp.element != o && tmp.succ != null)
  170.                 tmp = tmp.succ;
  171.             if (tmp.element == o) {
  172.                 return tmp;
  173.             } else {
  174.                 System.out.println("Elementot ne postoi vo listata");
  175.             }
  176.         } else {
  177.             System.out.println("Listata e prazna");
  178.         }
  179.         return first;
  180.     }
  181.  
  182. }
  183.  
  184. public class JuniTermin2{
  185.  
  186.     public static void removeNode(SLL<Integer> list) {
  187.         SLLNode<Integer> current = list.getFirst();
  188.         int delNode = 1, counter = 0;
  189.         while (current != null) {
  190.             if (counter == delNode) {
  191.                 list.delete(current);
  192.                 counter = 0;
  193.                 ++delNode;
  194.                 current = current.succ;
  195.             } else {
  196.                 ++counter;
  197.                 current = current.succ;
  198.             }
  199.         }
  200.         System.out.println(list);
  201.     }
  202.  
  203.     public static void main(String[] args) {
  204.         Scanner input = new Scanner(System.in);
  205.         SLL<Integer> list = new SLL<Integer>();
  206.         int n = input.nextInt();
  207.  
  208.         for (int i = 0; i < n; ++i) {
  209.             list.insertLast(input.nextInt());
  210.         }
  211.  
  212.         if (n > 0) {
  213.             removeNode(list);
  214.         } else {
  215.             System.out.println("Prazna lista");
  216.         }
  217.         input.close();
  218.     }
  219. }
Add Comment
Please, Sign In to add comment