SashkoKlincharov

[Java][АПС] - Спој листи

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