Advertisement
fensa08

#APS Lab 1/2

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