SlavkovB

[АПС] Бришење наизменично

Sep 17th, 2019
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.32 KB | None | 0 0
  1. /**Прв термин: Двострано поврзана листа од карактери. Почнува од напред и се брише 2, 4 6... јазол. Потоа почнува од назад па се бриши претпоследниот, прет-претпоследниот итн. Се додека не остане 1 јазол во листата. Помошни листи не се дозволени.
  2.  
  3. Влез: Се вчитува низата со празни места
  4.  
  5. Пример: a b c d e f g
  6. После прво бришење: a c e g
  7. После второ бришење(од назад) : c g
  8. Финално бришење (од напред) g
  9. Да се испечати: c
  10. */
  11.  
  12. //CODE
  13.  
  14.  
  15.  
  16. import java.util.Scanner;
  17.  
  18. class DLLNode<E> {
  19.     protected E element;
  20.     protected DLLNode<E> pred, succ;
  21.  
  22.     public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  23.         this.element = elem;
  24.         this.pred = pred;
  25.         this.succ = succ;
  26.     }
  27.  
  28.     @Override
  29.     public String toString() {
  30.         return element.toString();
  31.     }
  32. }
  33.  
  34. class DLL<E> {
  35.     private DLLNode<E> first, last;
  36.  
  37.     public DLL() {
  38.         // Construct an empty SLL
  39.         this.first = null;
  40.         this.last = null;
  41.     }
  42.  
  43.     public void deleteList() {
  44.         first = null;
  45.         last = null;
  46.     }
  47.  
  48.     public int length() {
  49.         int ret;
  50.         if (first != null) {
  51.             DLLNode<E> tmp = first;
  52.             ret = 1;
  53.             while (tmp.succ != null) {
  54.                 tmp = tmp.succ;
  55.                 ret++;
  56.             }
  57.             return ret;
  58.         } else
  59.             return 0;
  60.  
  61.     }
  62.  
  63.     public DLLNode<E> find(E o) {
  64.         if (first != null) {
  65.             DLLNode<E> tmp = first;
  66.             while (tmp.element != o && tmp.succ != null)
  67.                 tmp = tmp.succ;
  68.             if (tmp.element == o) {
  69.                 return tmp;
  70.             } else {
  71.                 System.out.println("Elementot ne postoi vo listata");
  72.             }
  73.         } else {
  74.             System.out.println("Listata e prazna");
  75.         }
  76.         return first;
  77.     }
  78.  
  79.     public void insertFirst(E o) {
  80.         DLLNode<E> ins = new DLLNode<E>(o, null, first);
  81.         if (first == null)
  82.             last = ins;
  83.         else
  84.             first.pred = ins;
  85.         first = ins;
  86.     }
  87.  
  88.     public void insertLast(E o) {
  89.         if (first == null)
  90.             insertFirst(o);
  91.         else {
  92.             DLLNode<E> ins = new DLLNode<E>(o, last, null);
  93.             last.succ = ins;
  94.             last = ins;
  95.         }
  96.     }
  97.  
  98.     public void insertAfter(E o, DLLNode<E> after) {
  99.         if (after == last) {
  100.             insertLast(o);
  101.             return;
  102.         }
  103.         DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  104.         after.succ.pred = ins;
  105.         after.succ = ins;
  106.     }
  107.  
  108.     public void insertBefore(E o, DLLNode<E> before) {
  109.         if (before == first) {
  110.             insertFirst(o);
  111.             return;
  112.         }
  113.         DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  114.         before.pred.succ = ins;
  115.         before.pred = ins;
  116.     }
  117.  
  118.     public E deleteFirst() {
  119.         if (first != null) {
  120.             DLLNode<E> tmp = first;
  121.             first = first.succ;
  122.             if (first != null)
  123.                 first.pred = null;
  124.             if (first == null)
  125.                 last = null;
  126.             return tmp.element;
  127.         } else
  128.             return null;
  129.     }
  130.  
  131.     public E deleteLast() {
  132.         if (first != null) {
  133.             if (first.succ == null)
  134.                 return deleteFirst();
  135.             else {
  136.                 DLLNode<E> tmp = last;
  137.                 last = last.pred;
  138.                 last.succ = null;
  139.                 return tmp.element;
  140.             }
  141.         }
  142.         // else throw Exception
  143.         return null;
  144.     }
  145.  
  146.     public E delete(DLLNode<E> node) {
  147.         if (node == first) {
  148.             deleteFirst();
  149.             return node.element;
  150.         }
  151.         if (node == last) {
  152.             deleteLast();
  153.             return node.element;
  154.         }
  155.         node.pred.succ = node.succ;
  156.         node.succ.pred = node.pred;
  157.         return node.element;
  158.  
  159.     }
  160.  
  161.     @Override
  162.     public String toString() {
  163.         String ret = new String();
  164.         if (first != null) {
  165.             DLLNode<E> tmp = first;
  166.             ret += tmp + "<->";
  167.             while (tmp.succ != null) {
  168.                 tmp = tmp.succ;
  169.                 ret += tmp + "<->";
  170.             }
  171.         } else
  172.             ret = "Prazna lista!!!";
  173.         return ret;
  174.     }
  175.  
  176.     public String toStringR() {
  177.         String ret = new String();
  178.         if (last != null) {
  179.             DLLNode<E> tmp = last;
  180.             ret += tmp + "<->";
  181.             while (tmp.pred != null) {
  182.                 tmp = tmp.pred;
  183.                 ret += tmp + "<->";
  184.             }
  185.         } else
  186.             ret = "Prazna lista!!!";
  187.         return ret;
  188.     }
  189.  
  190.     public DLLNode<E> getFirst() {
  191.         return first;
  192.     }
  193.  
  194.     public DLLNode<E> getLast() {
  195.  
  196.         return last;
  197.     }
  198. }
  199.  
  200. public class BrisiNaizmenicno {
  201.  
  202.     private static void BrisiNaizmenicno(DLL<String> list) {
  203.         DLLNode<String> first = null;
  204.         DLLNode<String> last = null;
  205.         int count = 1;
  206.         boolean left = true, right = false;
  207.  
  208.         while (list.length() > 2) {
  209.             if (left) {
  210.                 first = list.getFirst();
  211.  
  212.                 while (first != null) {
  213.                     if (count == 2) {
  214.                         list.delete(first);
  215.                         count = 0;
  216.                     }
  217.                     ++count;
  218.                     first = first.succ;
  219.                 }
  220.                 left = false;
  221.                 right = true;
  222.                 count = 1;
  223.             }
  224.             if (right) {
  225.                 last = list.getLast();
  226.  
  227.                 while (last != null) {
  228.                     if (count == 2) {
  229.                         list.delete(last);
  230.                         count = 0;
  231.                     }
  232.                     ++count;
  233.                     last = last.pred;
  234.                 }
  235.  
  236.                 right = false;
  237.                 left = true;
  238.                 count = 1;
  239.             }
  240.         }
  241.  
  242.         if (list.length() == 2) {
  243.             if (left)
  244.                 list.deleteLast();
  245.             else
  246.                 list.deleteFirst();
  247.         }
  248.  
  249.         System.out.println(list.getFirst().element);
  250.     }
  251.  
  252.     public static void main(String[] args) {
  253.         Scanner input = new Scanner(System.in);
  254.         DLL<String> list = new DLL<String>();
  255.  
  256.         String Line = input.nextLine();
  257.         String[] expression = Line.split(" ");
  258.  
  259.         for (int i = 0; i < expression.length; i++)
  260.             list.insertLast(expression[i]);
  261.  
  262.         BrisiNaizmenicno(list);
  263.         input.close();
  264.     }
  265. }
Add Comment
Please, Sign In to add comment