SashkoKlincharov

[Java][АПС] - Двојно поврзана листа: Раздели по парност

Jan 23rd, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.02 KB | None | 0 0
  1. Двојно поврзана листа: Раздели по парност Problem 1 (1 / 7)
  2. Дадена е двојно поврзана листа и со N јазли кои во себе содржат по еден природен број. Треба да се подели листата на две резултантни листи. Во првата резултантна листа треба да се преместат јазлите со непарни броеви, а во втората со парните.
  3.  
  4. Во првиот ред од влезот е даден бројот на јазли во листата, а потоа во вториот ред се дадени јазлите од кои е составена. На излез треба да се испечатат во еден ред јазлите на првата листа со непарните броеви, а во втор ред јазлите на втората листа со парните броеви.
  5.  
  6. Име на класата (Java): DivideOddEven
  7.  
  8. Sample input
  9. 3
  10. 4 8 6
  11.  
  12. Sample output
  13. 4 8 6
  14.  
  15.  
  16. import java.io.BufferedReader;
  17. import java.io.IOException;
  18. import java.io.InputStreamReader;
  19.  
  20. public class DivideOddEven {
  21.  
  22. public static void print(DLL<Integer> lista){
  23. DLLNode<Integer> tmp = lista.getFirst();
  24. // DLLNode<Integer> last = lista.getLast();
  25. while(tmp!=null){
  26. if(tmp.succ==null){
  27. System.out.print(tmp.element);
  28. break;
  29. }else {
  30. System.out.print(tmp.element + " ");
  31. tmp = tmp.succ;
  32. }}
  33. }
  34.  
  35. public static void main(String[] args) throws IOException {
  36.  
  37. BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  38. String s = stdin.readLine();
  39. int N = Integer.parseInt(s);
  40. s = stdin.readLine();
  41. String[] pomniza = s.split(" ");
  42. DLL<Integer> lista = new DLL<Integer>();
  43. for (int i = 0; i < N; i++) {
  44. lista.insertLast(Integer.parseInt(pomniza[i]));
  45.  
  46. }
  47.  
  48. // DLL<Integer> parni = lista.divideEven(lista);
  49. // DLL<Integer> neparni = lista.divideOdd(lista);
  50. print(lista.divideOdd(lista));
  51. System.out.print("\n");
  52. print(lista.divideEven(lista));
  53.  
  54. }
  55. }
  56.  
  57.  
  58. class DLL<E> {
  59. private DLLNode<E> first, last;
  60.  
  61. public DLL() {
  62. // Construct an empty SLL
  63. this.first = null;
  64. this.last = null;
  65. }
  66.  
  67. public void deleteList() {
  68. first = null;
  69. last = null;
  70. }
  71.  
  72. public int length() {
  73. int ret;
  74. if (first != null) {
  75. DLLNode<E> tmp = first;
  76. ret = 1;
  77. while (tmp.succ != null) {
  78. tmp = tmp.succ;
  79. ret++;
  80. }
  81. return ret;
  82. } else
  83. return 0;
  84.  
  85. }
  86.  
  87. public DLLNode<E> find(E o) {
  88. if (first != null) {
  89. DLLNode<E> tmp = first;
  90. while (tmp.element != o&&tmp.succ != null)
  91. tmp = tmp.succ;
  92. if (tmp.element == o) {
  93. return tmp;
  94. } else {
  95. System.out.println("Elementot ne postoi vo listata");
  96. }
  97. } else {
  98. System.out.println("Listata e prazna");
  99. }
  100. return first;
  101. }
  102.  
  103. public void insertFirst(E o) {
  104. DLLNode<E> ins = new DLLNode<E>(o, null, first);
  105. if (first == null)
  106. last = ins;
  107. else
  108. first.pred = ins;
  109. first = ins;
  110. }
  111.  
  112. public void insertLast(E o) {
  113. if (first == null)
  114. insertFirst(o);
  115. else {
  116. DLLNode<E> ins = new DLLNode<E>(o, last, null);
  117. last.succ = ins;
  118. last = ins;
  119. }
  120. }
  121.  
  122. public void insertAfter(E o, DLLNode<E> after) {
  123. if(after==last){
  124. insertLast(o);
  125. return;
  126. }
  127. DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
  128. after.succ.pred = ins;
  129. after.succ = ins;
  130. }
  131.  
  132. public void insertBefore(E o, DLLNode<E> before) {
  133. if(before == first){
  134. insertFirst(o);
  135. return;
  136. }
  137. DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
  138. before.pred.succ = ins;
  139. before.pred = ins;
  140. }
  141.  
  142. public E deleteFirst() {
  143. if (first != null) {
  144. DLLNode<E> tmp = first;
  145. first = first.succ;
  146. if (first != null) first.pred = null;
  147. if (first == null)
  148. last = null;
  149. return tmp.element;
  150. } else
  151. return null;
  152. }
  153.  
  154. public E deleteLast() {
  155. if (first != null) {
  156. if (first.succ == null)
  157. return deleteFirst();
  158. else {
  159. DLLNode<E> tmp = last;
  160. last = last.pred;
  161. last.succ = null;
  162. return tmp.element;
  163. }
  164. }
  165. // else throw Exception
  166. return null;
  167. }
  168.  
  169. public E delete(DLLNode<E> node) {
  170. if(node==first){
  171. deleteFirst();
  172. return node.element;
  173. }
  174. if(node==last){
  175. deleteLast();
  176. return node.element;
  177. }
  178. node.pred.succ = node.succ;
  179. node.succ.pred = node.pred;
  180. return node.element;
  181.  
  182. }
  183.  
  184. @Override
  185. public String toString() {
  186. String ret = new String();
  187. if (first != null) {
  188. DLLNode<E> tmp = first;
  189. ret += tmp + "<->";
  190. while (tmp.succ != null) {
  191. tmp = tmp.succ;
  192. ret += tmp + "<->";
  193. }
  194. } else
  195. ret = "Prazna lista!!!";
  196. return ret;
  197. }
  198.  
  199. public String toStringR() {
  200. String ret = new String();
  201. if (last != null) {
  202. DLLNode<E> tmp = last;
  203. ret += tmp + "<->";
  204. while (tmp.pred != null) {
  205. tmp = tmp.pred;
  206. ret += tmp + "<->";
  207. }
  208. } else
  209. ret = "Prazna lista!!!";
  210. return ret;
  211. }
  212.  
  213. public DLLNode<E> getFirst() {
  214. return first;
  215. }
  216.  
  217. public DLLNode<E> getLast() {
  218.  
  219. return last;
  220. }
  221.  
  222. public void izvadiDupliIPrebroj(){
  223.  
  224. }
  225.  
  226. public DLL<E> divideEven(DLL<E> lista){
  227. DLLNode<E> tmp = lista.getFirst();
  228. DLL<E> parni = new DLL<E>();
  229. while(tmp!=lista.getLast().succ){
  230. if((Integer)tmp.element%2==0){
  231. parni.insertLast(tmp.element);
  232. }
  233. tmp = tmp.succ;
  234. }
  235. return parni;
  236. }
  237. public DLL<E> divideOdd(DLL<E> lista){
  238. DLLNode<E> tmp = lista.getFirst();
  239. DLL<E> neparni = new DLL<E>();
  240. while(tmp!=lista.getLast().succ){
  241. if((Integer)tmp.element%2!=0){
  242. neparni.insertLast(tmp.element);
  243. }
  244. tmp = tmp.succ;
  245. }
  246. return neparni;
  247. }
  248.  
  249.  
  250. }
  251.  
  252. class DLLNode<E> {
  253. protected E element;
  254. protected DLLNode<E> pred, succ;
  255.  
  256. public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
  257. this.element = elem;
  258. this.pred = pred;
  259. this.succ = succ;
  260. }
  261.  
  262. @Override
  263. public String toString() {
  264. return element.toString();
  265. }
  266. }
Add Comment
Please, Sign In to add comment