Makarona

Спој листи наизменично

Oct 18th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.40 KB | None | 0 0
  1. /*Дадени се две еднострано поврзани листи чии што јазли содржат по еден природен број. Треба да се спојат двете листи во една резултантна на тој начин што наизменично прво ќе се додаваат првите два јазли од првата листа во резултантната, па првите два од втората листа, па следните два од првата, па следните два од втората итн. Јазлите што ќе останат треба да се додадат на крај во резултантната листа, прво оние што останале од првата листа, потоа оние што останале од втората листа.
  2.  
  3. Во првиот ред од влезот се дадени броевите од кои се составени јазлите по редослед во првата листа, а во вториот ред броевите од кои се составени јазлите по редослед во втората листа. На излез треба да се испечатат јазлите по редослед во резултантната споена листа.
  4.  
  5. Забелешка: Да се креира податочна структура еднострано поврзана листа и истата да се искористи во задачата.*/
  6. import java.io.BufferedReader;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9.  
  10. class SLLNode<E> {
  11.     E element;
  12.     SLLNode<E> succ;
  13.  
  14.     public SLLNode(E elem, SLLNode<E> succ) {
  15.         this.element = elem;
  16.         this.succ = succ;
  17.     }
  18. }
  19.  
  20. class SLL<E> {
  21.     SLLNode<E> first;
  22.  
  23.     public SLL() {
  24.         this.first = null;
  25.     }
  26.  
  27.  
  28.     public void insertFirst(E o) {
  29.         SLLNode<E> ins = new SLLNode<E>(o, first);
  30.         first = ins;
  31.     }
  32.  
  33.     public void insertLast(E o) {
  34.         if (first == null) {
  35.             insertFirst(o);
  36.         } else {
  37.             SLLNode<E> tmp = first;
  38.             while (tmp.succ != null)
  39.                 tmp = tmp.succ;
  40.             SLLNode<E> ins = new SLLNode<E>(o, null);
  41.             tmp.succ = ins;
  42.         }
  43.     }
  44.  
  45.     public SLLNode<E> getFirst() {
  46.         return first;
  47.     }
  48.  
  49. }
  50.  
  51. public class SpecialSLLJoin {
  52.  
  53.     private static SLL<Integer> specialJoin(SLL<Integer> list1, SLL<Integer> list2) {
  54.         SLL<Integer> rezultat = new SLL<Integer>();
  55.         SLLNode<Integer> jazol1 = list1.getFirst(), jazol2 = list2.getFirst();
  56.         boolean prva=true;
  57.         while (jazol1 != null&&jazol2 != null) {
  58.             int counter=0;
  59.             while (jazol1 != null&&counter!=2) {
  60.                 rezultat.insertLast(jazol1.element);
  61.                 jazol1 = jazol1.succ;
  62.                 counter++;
  63.             }
  64.             while (jazol2 != null&&counter!=4) {
  65.                 rezultat.insertLast(jazol2.element);
  66.                 jazol2 = jazol2.succ;
  67.                 counter++;
  68.             }
  69.         }
  70.         while (jazol1 != null) {
  71.             rezultat.insertLast(jazol1.element);
  72.             jazol1 = jazol1.succ;
  73.         }
  74.         while (jazol2 != null) {
  75.             rezultat.insertLast(jazol2.element);
  76.             jazol2 = jazol2.succ;
  77.         }
  78.  
  79.         return rezultat;
  80.     }
  81.  
  82.     public static void main(String[] args) throws IOException {
  83.         SLL<Integer> lista1=new SLL<Integer>();
  84.         SLL<Integer> lista2=new SLL<Integer>();
  85.         BufferedReader stdin = new BufferedReader(new InputStreamReader(
  86.                     System.in));
  87.         String s = stdin.readLine();
  88.         int N = Integer.parseInt(s);
  89.         s = stdin.readLine();
  90.         String[] pomniza = s.split(" ");
  91.         for (int i = 0; i < N; i++) {
  92.             lista1.insertLast(Integer.parseInt(pomniza[i]));
  93.         }
  94.  
  95.         s = stdin.readLine();
  96.         N = Integer.parseInt(s);
  97.         s = stdin.readLine();
  98.         pomniza = s.split(" ");
  99.         for (int i = 0; i < N; i++) {
  100.             lista2.insertLast(Integer.parseInt(pomniza[i]));
  101.         }
  102.  
  103.         SLL<Integer> spoeni = specialJoin(lista1,lista2);
  104.         SLLNode<Integer> pok=spoeni.getFirst();
  105.         while(pok!=null) {
  106.             System.out.print(pok.element+" ");
  107.             pok=pok.succ;
  108.         }
  109.     }
  110. }
Add Comment
Please, Sign In to add comment