Advertisement
KristijanT

SLL Java

Oct 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.16 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4.  
  5. public class SpecialSLLJoin {
  6.  
  7.  
  8.     public static void main(String[] args) throws IOException {
  9.         // Initialization of SLL
  10.         SLL<Integer> lista1 = new SLL<Integer>();
  11.         SLL<Integer> lista2 = new SLL<Integer>();
  12.         //
  13.         BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  14.         String s = stdin.readLine();
  15.         int N = Integer.parseInt(s);
  16.         s = stdin.readLine();
  17.         String[] pomniza = s.split(" ");
  18.         for (int i = 0; i < N; i++) {
  19.             lista1.insertLast(Integer.parseInt(pomniza[i]));
  20.         }
  21.         s = stdin.readLine();
  22.         N = Integer.parseInt(s);
  23.         s = stdin.readLine();
  24.         pomniza = s.split(" ");
  25.         for (int i = 0; i < N; i++) {
  26.             lista2.insertLast(Integer.parseInt(pomniza[i]));
  27.         }
  28.         lista1.specialJoin(lista1,lista2);
  29.  
  30.     }
  31. }
  32. class SLL<E extends Comparable<E>> implements Comparable<SLL<E>> {
  33.     private SLLNode<E> header;
  34.     public SLL() {
  35.         this.header=null;
  36.     }
  37.     public SLL(SLL<E> e) {
  38.         this.header=e.header;
  39.     }
  40.     public void printFirstToLast() {
  41.         for(SLLNode<E> curr=header; curr!=null; curr=curr.succ) {
  42.             System.out.print(curr.element + " ");
  43.         }
  44.     }
  45.     public void insertLast(E in) {
  46.         if (header != null) {
  47.             SLLNode<E> tmp = header;
  48.             while (tmp.succ != null)
  49.                 tmp = tmp.succ;
  50.             SLLNode<E> ins = new SLLNode<E>(in,null);
  51.             tmp.succ = ins;
  52.         } else {
  53.             SLLNode<E> ins = new SLLNode<E>(in,header);
  54.             header = ins;
  55.         }
  56.     }
  57.     //
  58.     public SLLNode<E> getNode() {
  59.         return header;
  60.     }
  61.     @Override
  62.     public int compareTo(SLL<E> e) {
  63.         return getNode().compareTo(e.getNode());
  64.     }
  65.     void removeDuplicates() {
  66.         SLLNode<E> current = header;
  67.         SLLNode<E> next_next;
  68.         if (header == null)
  69.             return;
  70.         while (current.succ != null) {
  71.             if (current.element == current.succ.element) {
  72.                 next_next = current.succ.succ;
  73.                 current.succ = null;
  74.                 current.succ = next_next;
  75.             } else
  76.                 current = current.succ;
  77.         }
  78.     }
  79.     public void joinLists(SLL<E> second) {
  80.         SLL<E> result = new SLL<E>();
  81.         SLLNode<E> curr1=this.header;
  82.         SLLNode<E> curr2=second.header;
  83.         while(curr1!=null&&curr2!=null) {
  84.             if(curr1.element.compareTo(curr2.element) < 0) {
  85.                 result.insertLast(curr1.element);
  86.                 if(curr1.equals(curr2)) curr2=curr2.succ;//System.out.print("R ");//
  87.                 curr1=curr1.succ;
  88.             } else {
  89.                 result.insertLast(curr2.element);
  90.                 if(curr2.equals(curr1)) curr1=curr1.succ;//System.out.print("R ");//
  91.                 curr2=curr2.succ;
  92.             }
  93.         }
  94.         if(curr1!=null) {
  95.             while(curr1!=null) {
  96.                 result.insertLast(curr1.element);
  97.                 curr1=curr1.succ;
  98.             }
  99.         }
  100.         if(curr2!=null) {
  101.             while(curr2!=null) {
  102.                 result.insertLast(curr2.element);
  103.                 curr2=curr2.succ;
  104.             }
  105.         }
  106.         result.removeDuplicates();
  107.         this.header=null;
  108.         this.header=result.header;
  109.     }
  110.     //
  111.     public void specialJoin(SLL<E> first,SLL<E> second) {
  112.         SLL<E> result = new SLL<E>();
  113.         SLLNode<E> curr1=first.header;
  114.         SLLNode<E> curr2=second.header;
  115.         boolean flag = true;
  116.         while(curr1!=null&&curr2!=null) {
  117.             if(flag) {
  118.                 result.insertLast(curr1.element);
  119.                 curr1=curr1.succ;
  120.                 if(curr1==null) break;
  121.                 result.insertLast(curr1.element);
  122.                 curr1=curr1.succ;
  123.                 flag=false;
  124.             } else {
  125.                 result.insertLast(curr2.element);
  126.                 curr2=curr2.succ;
  127.                 if(curr2==null) break;
  128.                 result.insertLast(curr2.element);
  129.                 curr2=curr2.succ;
  130.                 flag=true;
  131.             }
  132.         }
  133.         if(curr1!=null) {
  134.             while(curr1!=null) {
  135.                 result.insertLast(curr1.element);
  136.                 curr1=curr1.succ;
  137.             }
  138.         }
  139.         if(curr2!=null) {
  140.             while(curr2!=null) {
  141.                 result.insertLast(curr2.element);
  142.                 curr2=curr2.succ;
  143.             }
  144.         }
  145.         result.printFirstToLast();
  146.     }
  147.     //
  148. }
  149. class SLLNode<E extends Comparable<E>> implements Comparable<SLLNode<E>> {
  150.     protected E element;
  151.     protected SLLNode<E> succ;
  152.     SLLNode(E elem, SLLNode<E> succ) {
  153.         this.element=elem;
  154.         this.succ=succ;
  155.     }
  156.     //
  157.     public E getElement() {
  158.         return element;
  159.     }
  160.     @Override
  161.     public int compareTo(SLLNode<E> e) {
  162.         return getElement().compareTo(e.getElement());
  163.     }
  164.  
  165.     public boolean equals(SLLNode<E> e) {
  166.         if(this.element==e.element) return true;
  167.         return false;
  168.     }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement