Advertisement
fensa08

[APS] Kolokvium 1 - Palindrom

Nov 15th, 2019
377
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.86 KB | None | 0 0
  1. Палиндром Problem 1 (1 / 2)
  2.  
  3. Дадена е двојно поврзана листа со N јазли каде секој јазел содржи по еден карактер (буква). Да се провери дали двојно поврзаната листа е палиндром: односно ако ја изминете од почеток до крај и од крај до почеток, дали ќе добиете ист збор. Во првиот ред од влезот даден е бројот на јазли во листата N, а во вториот ред се дадени броевите. На излез треба да се испечати 1 ако листата е палиндром, -1 ако не е.
  4.  
  5. Име на класата: PalindromeDLL
  6. ==========================================================================================================================================
  7.  
  8. import java.util.Scanner;
  9.  
  10. class DLLNode<E> {
  11.     protected E element;
  12.     protected DLLNode<E> pred, succ;
  13.  
  14.     public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  15.         this.element = elem;
  16.         this.pred = pred;
  17.         this.succ = succ;
  18.     }
  19.  
  20.     @Override
  21.     public String toString() {
  22.         return "<-" + element.toString() + "->";
  23.     }
  24. }
  25.  
  26. class DLL<E> {
  27.     private DLLNode<E> first, last;
  28.  
  29.     public DLL() {
  30.         // Construct an empty SLL
  31.         this.first = null;
  32.         this.last = null;
  33.     }
  34.  
  35.     public void deleteList() {
  36.         first = null;
  37.         last = null;
  38.     }
  39.  
  40.     public int length() {
  41.         int ret;
  42.         if (first != null) {
  43.             DLLNode<E> tmp = first;
  44.             ret = 1;
  45.             while (tmp.succ != null) {
  46.                 tmp = tmp.succ;
  47.                 ret++;
  48.             }
  49.             return ret;
  50.         } else
  51.             return 0;
  52.  
  53.     }
  54.  
  55.     public void insertFirst(E o) {
  56.         DLLNode<E> ins = new DLLNode<E>(o, null, first);
  57.         if (first == null)
  58.             last = ins;
  59.         else
  60.             first.pred = ins;
  61.         first = ins;
  62.     }
  63.  
  64.     public void insertLast(E o) {
  65.         if (first == null)
  66.             insertFirst(o);
  67.         else {
  68.             DLLNode<E> ins = new DLLNode<E>(o, last, null);
  69.             last.succ = ins;
  70.             last = ins;
  71.         }
  72.     }
  73.  
  74.     public void insertAfter(E o, DLLNode<E> after) {
  75.         if (after == last) {
  76.             insertLast(o);
  77.             return;
  78.         }
  79.         DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  80.         after.succ.pred = ins;
  81.         after.succ = ins;
  82.     }
  83.  
  84.     public void insertBefore(E o, DLLNode<E> before) {
  85.         if (before == first) {
  86.             insertFirst(o);
  87.             return;
  88.         }
  89.         DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  90.         before.pred.succ = ins;
  91.         before.pred = ins;
  92.     }
  93.  
  94.     public E deleteFirst() {
  95.         if (first != null) {
  96.             DLLNode<E> tmp = first;
  97.             first = first.succ;
  98.             if (first != null) first.pred = null;
  99.             if (first == null)
  100.                 last = null;
  101.             return tmp.element;
  102.         } else
  103.             return null;
  104.     }
  105.  
  106.     public E deleteLast() {
  107.         if (first != null) {
  108.             if (first.succ == null)
  109.                 return deleteFirst();
  110.             else {
  111.                 DLLNode<E> tmp = last;
  112.                 last = last.pred;
  113.                 last.succ = null;
  114.                 return tmp.element;
  115.             }
  116.         }
  117.         // else throw Exception
  118.         return null;
  119.     }
  120.  
  121.     @Override
  122.     public String toString() {
  123.         String ret = new String();
  124.         if (first != null) {
  125.             DLLNode<E> tmp = first;
  126.             ret += tmp + "<->";
  127.             while (tmp.succ != null) {
  128.                 tmp = tmp.succ;
  129.                 ret += tmp + "<->";
  130.             }
  131.         } else
  132.             ret = "Prazna lista!!!";
  133.         return ret;
  134.     }
  135.  
  136.     public DLLNode<E> getFirst() {
  137.         return first;
  138.     }
  139.  
  140.     public DLLNode<E> getLast() {
  141.  
  142.         return last;
  143.     }
  144.  
  145. }
  146.  
  147. public class PalindromeDLL {
  148.  
  149.     public static int isItPalindrome(DLL<Integer> list){
  150.         //Vashiot kod tuka...
  151.  
  152.         DLLNode<Integer> p1 = list.getFirst();
  153.         DLLNode<Integer> p2 = list.getLast();
  154.  
  155.         while(p1 != p2){
  156.             if( p1.element  != p2.element){
  157.                 return -1;
  158.             }
  159.             p1 = p1.succ;
  160.             p2 = p2.pred;
  161.         }
  162.  
  163.  
  164.         return 1;
  165.  
  166.     }
  167.  
  168.     public static void main(String[] args) {
  169.         Scanner in = new Scanner(System.in);
  170.         int n = in.nextInt();
  171.         DLL<Integer> list = new DLL<Integer>();
  172.         for (int i = 0; i < n; i++) {
  173.             list.insertLast(in.nextInt());
  174.         }
  175.         in.close();
  176.         System.out.println(isItPalindrome(list));
  177.     }
  178.  
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement