Advertisement
fensa08

#APS Lab 1/3

Oct 16th, 2019
1,950
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.43 KB | None | 0 0
  1. Спој листи наизменично Problem 3 (1 / 2)
  2.  
  3. Дадени се две еднострано поврзани листи чии што јазли содржат по еден природен број. Треба да се спојат двете листи во една резултантна на тој начин што наизменично прво ќе се додаваат првите два јазли од првата листа во резултантната, па првите два од втората листа, па следните два од првата, па следните два од втората итн. Јазлите што ќе останат треба да се додадат на крај во резултантната листа, прво оние што останале од првата листа, потоа оние што останале од втората листа.
  4.  
  5. Во првиот ред од влезот се дадени броевите од кои се составени јазлите по редослед во првата листа, а во вториот ред броевите од кои се составени јазлите по редослед во втората листа. На излез треба да се испечатат јазлите по редослед во резултантната споена листа.
  6.  
  7. Забелешка: Да се креира податочна структура еднострано поврзана листа и истата да се искористи во задачата.
  8.  
  9.  
  10. Sample input
  11.  
  12. 4
  13. 1 2 3 4
  14. 3
  15. 5 6 7
  16.  
  17. Sample output
  18.  
  19. 1 2 5 6 3 4 7
  20.  
  21. ==========================================================================================================================================
  22.  
  23. import java.io.BufferedReader;
  24. import java.io.IOException;
  25. import java.io.InputStreamReader;
  26. import java.util.Iterator;
  27. import java.util.NoSuchElementException;
  28.  
  29. public class SpecialSLLJoin {
  30.  
  31.     static class SLL<E> {
  32.         private SLLNode<E> first;
  33.  
  34.         public SLL() {
  35.             // Construct an empty SLL
  36.             this.first = null;
  37.         }
  38.  
  39.         public void deleteList() {
  40.             first = null;
  41.         }
  42.  
  43.         public int length() {
  44.             int ret;
  45.             if (first != null) {
  46.                 SLLNode<E> tmp = first;
  47.                 ret = 1;
  48.                 while (tmp.succ != null) {
  49.                     tmp = tmp.succ;
  50.                     ret++;
  51.                 }
  52.                 return ret;
  53.             } else
  54.                 return 0;
  55.  
  56.         }
  57.  
  58.         @Override
  59.         public String toString() {
  60.             String ret = new String();
  61.             if (first != null) {
  62.                 SLLNode<E> tmp = first;
  63.                 ret += tmp + "->";
  64.                 while (tmp.succ != null) {
  65.                     tmp = tmp.succ;
  66.                     ret += tmp + "->";
  67.                 }
  68.             } else
  69.                 ret = "Prazna lista!!!";
  70.             return ret;
  71.         }
  72.  
  73.         public void insertFirst(E o) {
  74.             SLLNode<E> ins = new SLLNode<E>(o, first);
  75.             first = ins;
  76.         }
  77.  
  78.         public void insertAfter(E o, SLLNode<E> node) {
  79.             if (node != null) {
  80.                 SLLNode<E> ins = new SLLNode<E>(o, node.succ);
  81.                 node.succ = ins;
  82.             } else {
  83.                 System.out.println("Dadenot jazol e null");
  84.             }
  85.         }
  86.  
  87.         public void insertBefore(E o, SLLNode<E> before) {
  88.  
  89.             if (first != null) {
  90.                 SLLNode<E> tmp = first;
  91.                 if(first==before){
  92.                     this.insertFirst(o);
  93.                     return;
  94.                 }
  95.                 //ako first!=before
  96.                 while (tmp.succ != before)
  97.                     tmp = tmp.succ;
  98.                 if (tmp.succ == before) {
  99.                     SLLNode<E> ins = new SLLNode<E>(o, before);
  100.                     tmp.succ = ins;
  101.                 } else {
  102.                     System.out.println("Elementot ne postoi vo listata");
  103.                 }
  104.             } else {
  105.                 System.out.println("Listata e prazna");
  106.             }
  107.         }
  108.  
  109.         public void insertLast(E o) {
  110.             if (first != null) {
  111.                 SLLNode<E> tmp = first;
  112.                 while (tmp.succ != null)
  113.                     tmp = tmp.succ;
  114.                 SLLNode<E> ins = new SLLNode<E>(o, null);
  115.                 tmp.succ = ins;
  116.             } else {
  117.                 insertFirst(o);
  118.             }
  119.         }
  120.  
  121.         public E deleteFirst() {
  122.             if (first != null) {
  123.                 SLLNode<E> tmp = first;
  124.                 first = first.succ;
  125.                 return tmp.element;
  126.             } else {
  127.                 System.out.println("Listata e prazna");
  128.                 return null;
  129.             }
  130.         }
  131.  
  132.         public E delete(SLLNode<E> node) {
  133.             if (first != null) {
  134.                 SLLNode<E> tmp = first;
  135.                 if(first ==node){
  136.                     return this.deleteFirst();
  137.                 }
  138.                 while (tmp.succ != node&&tmp.succ.succ != null)
  139.                     tmp = tmp.succ;
  140.                 if (tmp.succ == node) {
  141.                     tmp.succ = tmp.succ.succ;
  142.                     return node.element;
  143.                 } else {
  144.                     System.out.println("Elementot ne postoi vo listata");
  145.                     return null;
  146.                 }
  147.             } else {
  148.                 System.out.println("Listata e prazna");
  149.                 return null;
  150.             }
  151.  
  152.         }
  153.  
  154.         public SLLNode<E> getFirst() {
  155.             return first;
  156.         }
  157.  
  158.         public SLLNode<E> find(E o) {
  159.             if (first != null) {
  160.                 SLLNode<E> tmp = first;
  161.                 while (tmp.element != o && tmp.succ != null)
  162.                     tmp = tmp.succ;
  163.                 if (tmp.element == o) {
  164.                     return tmp;
  165.                 } else {
  166.                     System.out.println("Elementot ne postoi vo listata");
  167.                 }
  168.             } else {
  169.                 System.out.println("Listata e prazna");
  170.             }
  171.             return first;
  172.         }
  173.  
  174.         public Iterator<E> iterator () {
  175.             // Return an iterator that visits all elements of this list, in left-to-right order.
  176.             return new LRIterator<E>();
  177.         }
  178.  
  179.         // //////////Inner class ////////////
  180.  
  181.         private class LRIterator<E> implements Iterator<E> {
  182.  
  183.             private SLLNode<E> place, curr;
  184.  
  185.             private LRIterator() {
  186.                 place = (SLLNode<E>) first;
  187.                 curr = null;
  188.             }
  189.  
  190.             public boolean hasNext() {
  191.                 return (place != null);
  192.             }
  193.  
  194.             public E next() {
  195.                 if (place == null)
  196.                     throw new NoSuchElementException();
  197.                 E nextElem = place.element;
  198.                 curr = place;
  199.                 place = place.succ;
  200.                 return nextElem;
  201.             }
  202.  
  203.             public void remove() {
  204.                 //Not implemented
  205.             }
  206.         }
  207.  
  208.         public void mirror(){
  209.             if (first != null) {
  210.                 //m=nextsucc, p=tmp,q=next
  211.                 SLLNode<E> tmp = first;
  212.                 SLLNode<E> newsucc = null;
  213.                 SLLNode<E> next;
  214.  
  215.                 while(tmp != null){
  216.                     next = tmp.succ;
  217.                     tmp.succ = newsucc;
  218.                     newsucc = tmp;
  219.                     tmp = next;
  220.                 }
  221.                 first = newsucc;
  222.             }
  223.  
  224.         }
  225.  
  226.         public void merge (SLL<E> in){
  227.             if (first != null) {
  228.                 SLLNode<E> tmp = first;
  229.                 while(tmp.succ != null)
  230.                     tmp = tmp.succ;
  231.                 tmp.succ = in.getFirst();
  232.             }
  233.             else{
  234.                 first = in.getFirst();
  235.             }
  236.         }
  237.     }
  238.  
  239.     static class SLLNode<E> {
  240.         protected E element;
  241.         protected SLLNode<E> succ;
  242.  
  243.         public SLLNode(E elem, SLLNode<E> succ) {
  244.             this.element = elem;
  245.             this.succ = succ;
  246.         }
  247.  
  248.         @Override
  249.         public String toString() {
  250.             return element.toString();
  251.         }
  252.     }
  253.  
  254.     static SLL<Integer> specialJoin(SLL<Integer> lista1, SLL<Integer> lista2){
  255.  
  256.         SLL<Integer> spoeni = new SLL<Integer>();
  257.         SLLNode<Integer> p1 = lista1.getFirst();
  258.         SLLNode<Integer> p2 = lista2.getFirst();
  259.  
  260.         int counter = 0;
  261.         while( p1 != null && p2 != null){
  262.  
  263.             if(counter < 2){
  264.                 spoeni.insertLast(p1.element);
  265.                 p1 = p1.succ;
  266.                 counter++;
  267.             }
  268.             else if (counter >= 2 && counter < 4){
  269.                 spoeni.insertLast(p2.element);
  270.                 p2 = p2.succ;
  271.                 if(counter == 3){
  272.                     counter = 0;
  273.                 }else{
  274.                     counter++;
  275.                 }
  276.             }
  277.  
  278.            
  279.         }
  280.  
  281.         if(p1 != null){
  282.             while(p1 != null){
  283.                 spoeni.insertLast(p1.element);
  284.                 p1 = p1.succ;
  285.             }
  286.         }
  287.  
  288.         if(p2 != null){
  289.             while( p2 != null){
  290.                 spoeni.insertLast(p2.element);
  291.                 p2 = p2.succ;
  292.             }
  293.         }
  294.  
  295.         return spoeni;
  296.  
  297.     }
  298.  
  299.     public static void main(String[] args) throws IOException{
  300.  
  301.         BufferedReader stdin = new BufferedReader(new InputStreamReader(
  302.                 System.in));
  303.         String s = stdin.readLine();
  304.         int N = Integer.parseInt(s);
  305.         s = stdin.readLine();
  306.         String[] pomniza = s.split(" ");
  307.         SLL<Integer> lista1 = new SLL<Integer>();
  308.         for (int i = 0; i < N; i++) {
  309.             lista1.insertLast(Integer.parseInt(pomniza[i]));
  310.         }
  311.  
  312.         s = stdin.readLine();
  313.         N = Integer.parseInt(s);
  314.         s = stdin.readLine();
  315.         pomniza = s.split(" ");
  316.         SLL<Integer> lista2 = new SLL<Integer>();
  317.         for (int i = 0; i < N; i++) {
  318.             lista2.insertLast(Integer.parseInt(pomniza[i]));
  319.         }
  320.  
  321.         SLL<Integer> spoeni = specialJoin(lista1,lista2);
  322.  
  323.         SLLNode<Integer> pok = spoeni.getFirst();
  324.         while(pok != null){
  325.             System.out.print(pok.element + " ");
  326.             pok = pok.succ;
  327.         }
  328.  
  329.     }
  330.  
  331.  
  332. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement