duplicityyy

[АПС] - Преврти ја листата (ИСПИТНА)

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