Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**Подели според парност
- Дадена е двострано поврзана листа чии што јазли содржат по еден природен број. Листата треба да се подели на две резултантни листи, т.ш. во првата резултанта листа ќе бидат бидат сместени јазли од влезната листа кои содржат парни броеви, а во втората – непарните.
- Јазлите во резултантните листи се додаваат наизменично почнувајќи од почетокот и крајот на влезната листа (т.е. прво се разгледува првиот елемент од листата и се додава во соодветната резултантна листа, па последниот, па вториот итн...)
- Во првиот ред од влезот е даден бројот на јазли во листата, а во вториот ред се дадени броевите од кои се составени јазлите по редослед во листата.
- Во првиот ред од излезот треба да се испечатат јазлите по редослед од првата резултантна листа (т.е. парните), во вториот ред од втората (т.е. непарните) .
- Име на класа (за Java): PodeliSporedParnost
- Забелешка: При реализација на задачите МОРА да се користат дадените структури, а не да користат помошни структури како низи или сл.
- Sample input
- 5
- 1 2 3 4 5
- Sample output
- 2 4
- 1 5 3
- Sample input
- 6
- 7 9 12 13 16 18
- Sample output
- 18 16 12
- 7 9 13
- */
- //CODE
- import java.util.Scanner;
- class DLLNode<E> {
- protected E element;
- protected DLLNode<E> pred, succ;
- public DLLNode(E elem, DLLNode<E> pred, DLLNode<E> succ) {
- this.element = elem;
- this.pred = pred;
- this.succ = succ;
- }
- @Override
- public String toString() {
- return element.toString();
- }
- }
- class DLL<E> {
- private DLLNode<E> first, last;
- public DLL() {
- // Construct an empty SLL
- this.first = null;
- this.last = null;
- }
- public void deleteList() {
- first = null;
- last = null;
- }
- public int length() {
- int ret;
- if (first != null) {
- DLLNode<E> tmp = first;
- ret = 1;
- while (tmp.succ != null) {
- tmp = tmp.succ;
- ret++;
- }
- return ret;
- } else
- return 0;
- }
- public DLLNode<E> find(E o) {
- if (first != null) {
- DLLNode<E> tmp = first;
- while (tmp.element != o && tmp.succ != null)
- tmp = tmp.succ;
- if (tmp.element == o) {
- return tmp;
- } else {
- System.out.println("Elementot ne postoi vo listata");
- }
- } else {
- System.out.println("Listata e prazna");
- }
- return first;
- }
- public void insertFirst(E o) {
- DLLNode<E> ins = new DLLNode<E>(o, null, first);
- if (first == null)
- last = ins;
- else
- first.pred = ins;
- first = ins;
- }
- public void insertLast(E o) {
- if (first == null)
- insertFirst(o);
- else {
- DLLNode<E> ins = new DLLNode<E>(o, last, null);
- last.succ = ins;
- last = ins;
- }
- }
- public void insertAfter(E o, DLLNode<E> after) {
- if (after == last) {
- insertLast(o);
- return;
- }
- DLLNode<E> ins = new DLLNode<E>(o, after, after.succ);
- after.succ.pred = ins;
- after.succ = ins;
- }
- public void insertBefore(E o, DLLNode<E> before) {
- if (before == first) {
- insertFirst(o);
- return;
- }
- DLLNode<E> ins = new DLLNode<E>(o, before.pred, before);
- before.pred.succ = ins;
- before.pred = ins;
- }
- public E deleteFirst() {
- if (first != null) {
- DLLNode<E> tmp = first;
- first = first.succ;
- if (first != null)
- first.pred = null;
- if (first == null)
- last = null;
- return tmp.element;
- } else
- return null;
- }
- public E deleteLast() {
- if (first != null) {
- if (first.succ == null)
- return deleteFirst();
- else {
- DLLNode<E> tmp = last;
- last = last.pred;
- last.succ = null;
- return tmp.element;
- }
- }
- // else throw Exception
- return null;
- }
- public E delete(DLLNode<E> node) {
- if (node == first) {
- deleteFirst();
- return node.element;
- }
- if (node == last) {
- deleteLast();
- return node.element;
- }
- node.pred.succ = node.succ;
- node.succ.pred = node.pred;
- return node.element;
- }
- @Override
- public String toString() {
- String ret = new String();
- if (first != null) {
- DLLNode<E> tmp = first;
- ret += tmp + " ";
- while (tmp.succ != null) {
- tmp = tmp.succ;
- ret += tmp + " ";
- }
- } else
- ret = "Prazna lista!!!";
- return ret;
- }
- public String toStringR() {
- String ret = new String();
- if (last != null) {
- DLLNode<E> tmp = last;
- ret += tmp + "<->";
- while (tmp.pred != null) {
- tmp = tmp.pred;
- ret += tmp + "<->";
- }
- } else
- ret = "Prazna lista!!!";
- return ret;
- }
- public DLLNode<E> getFirst() {
- return first;
- }
- public DLLNode<E> getLast() {
- return last;
- }
- public void izvadiDupliIPrebroj() {
- }
- }
- public class PodeliSporedParnost {
- private static void PodeliSporedParnost(DLL<Integer> list, int n) {
- DLLNode<Integer> beginning = list.getFirst();
- DLLNode<Integer> end = list.getLast();
- DLL<Integer> list2 = new DLL<Integer>();
- DLL<Integer> list3 = new DLL<Integer>();
- while (beginning != end) {
- if (beginning.element % 2 == 0)
- list2.insertLast(beginning.element);
- else
- list3.insertLast(beginning.element);
- if (end.element % 2 == 0)
- list2.insertLast(end.element);
- else
- list3.insertLast(end.element);
- beginning = beginning.succ;
- end = end.pred;
- if (beginning == end.succ)
- break;
- }
- if (n % 2 == 1)
- if (beginning.element % 2 != 0)
- list3.insertLast(beginning.element);
- else
- list2.insertLast(beginning.element);
- System.out.println(list2);
- System.out.println(list3);
- }
- public static void main(String[] args) {
- DLL<Integer> list = new DLL<Integer>();
- Scanner input = new Scanner(System.in);
- int n = input.nextInt();
- for (int i = 0; i < n; i++)
- list.insertLast(input.nextInt());
- PodeliSporedParnost(list, n);
- input.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement