Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Спој листи */
- ------------------------------------------------------------------------------------------------------------------------------------------
- /* Дадени се две еднострано поврзани листи чии јазли содржат по еден природен број. Листите се сортирани во растечки редослед. Треба да се спојат двете листи во една така што резултантната листа да е сортирана. Сортирањето е подредување со слевање. Јазлите кои се јавуваат како дупликати (од иста листа или од различна) да се отстранат.
- Во првиот ред од влезот е даден бројот на јазли во првата листа, потоа во вториот ред се дадени броевите од кои се составени јазлите по редослед во првата листа, па во третиот ред е даден бројот на јазли во втората листа, и на крај во четвртиот ред броевите од кои се составени јазлите по редослед во втората листа. На излез треба да се испечатат јазлите по редослед во резултантната споена листа.
- Име на класата (Java): SLLJoinLists
- Забелешка: Да се креира податочна структура еднострано поврзана листа и истата да се искористи во задачата. */
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- class SLLNode<E> {
- E element;
- SLLNode<E> succ;
- public SLLNode(E elem, SLLNode<E> succ) {
- this.element = elem;
- this.succ = succ;
- }
- @Override
- public String toString() {
- return element.toString();
- }
- }
- class SLL<E> {
- private SLLNode<E> first;
- public SLL() {
- // Construct an empty SLL
- this.first = null;
- }
- public void deleteList() {
- first = null;
- }
- public int length() {
- int ret;
- if (first != null) {
- SLLNode<E> tmp = first;
- ret = 1;
- while (tmp.succ != null) {
- tmp = tmp.succ;
- ret++;
- }
- return ret;
- } else
- return 0;
- }
- @Override
- public String toString() {
- String ret = new String();
- if (first != null) {
- SLLNode<E> tmp = first;
- ret += tmp + " ";
- while (tmp.succ != null) {
- tmp = tmp.succ;
- ret += tmp + " ";
- }
- } else
- ret = "Prazna lista!!!";
- return ret;
- }
- public void insertFirst(E o) {
- SLLNode<E> ins = new SLLNode<E>(o, first);
- first = ins;
- }
- public void insertAfter(E o, SLLNode<E> node) {
- if (node != null) {
- SLLNode<E> ins = new SLLNode<E>(o, node.succ);
- node.succ = ins;
- } else {
- System.out.println("Dadenot jazol e null");
- }
- }
- public void insertBefore(E o, SLLNode<E> before) {
- if (first != null) {
- SLLNode<E> tmp = first;
- if(first==before){
- this.insertFirst(o);
- return;
- }
- //ako first!=before
- while (tmp.succ != before)
- tmp = tmp.succ;
- if (tmp.succ == before) {
- SLLNode<E> ins = new SLLNode<E>(o, before);
- tmp.succ = ins;
- } else {
- System.out.println("Elementot ne postoi vo listata");
- }
- } else {
- System.out.println("Listata e prazna");
- }
- }
- public void insertLast(E o) {
- if (first != null) {
- SLLNode<E> tmp = first;
- while (tmp.succ != null)
- tmp = tmp.succ;
- SLLNode<E> ins = new SLLNode<E>(o, null);
- tmp.succ = ins;
- } else {
- insertFirst(o);
- }
- }
- public SLLNode<E> getFirst() {
- return first;
- }
- }
- public class SLLJoinLists {
- public static void SLLJoinLists(SLL<Integer> lista1, SLL<Integer> lista2){
- SLL<Integer> spoena = new SLL<>();
- SLLNode<Integer> first1 = lista1.getFirst();
- SLLNode<Integer> first2 = lista2.getFirst();
- while (first1 != null&&first2 != null){
- SLLNode<Integer> pok1 = first1;
- SLLNode<Integer> pok2 = first2;
- if(pok1.element > pok2.element){
- SLLNode<Integer> dvizi = spoena.getFirst();
- if(dvizi == null){
- spoena.insertLast(pok2.element);
- first2 = first2.succ;
- }
- else {
- while (dvizi.succ != null){
- dvizi = dvizi.succ;
- }
- if(pok2.element == dvizi.element){
- first2 = first2.succ;
- }
- else {
- spoena.insertLast(pok2.element);
- first2 = first2.succ;
- }
- }
- }
- else if(pok1.element < pok2.element){
- SLLNode<Integer> dvizi = spoena.getFirst();
- if(dvizi == null){
- spoena.insertLast(pok1.element);
- first1 = first1.succ;
- }
- else {
- while (dvizi.succ != null){
- dvizi = dvizi.succ;
- }
- if(pok1.element == dvizi.element){
- first1 = first1.succ;
- }
- else {
- spoena.insertLast(pok1.element);
- first1 = first1.succ;
- }
- }
- }
- else {
- SLLNode<Integer> dvizi = spoena.getFirst();
- if(dvizi == null){
- spoena.insertLast(first1.element);
- first1 = first1.succ;
- first2 = first2.succ;
- }
- else {
- while (dvizi.succ != null){
- dvizi = dvizi.succ;
- }
- if(pok1.element == dvizi.element){
- first1 = first1.succ;
- first2 = first2.succ;
- }
- else {
- spoena.insertLast(first1.element);
- first1 = first1.succ;
- first2 = first2.succ;
- }
- }
- }
- }
- if(first1 != null){
- while (first1 != null){
- SLLNode<Integer> dvizi = spoena.getFirst();
- while (dvizi.succ != null){
- dvizi=dvizi.succ;
- }
- if(first1.element == dvizi.element){
- first1 = first1.succ;
- }
- else {
- spoena.insertLast(first1.element);
- first1 = first1.succ;
- }
- }
- }
- if(first2 != null){
- SLLNode<Integer> dvizi = spoena.getFirst();
- while (dvizi.succ != null){
- dvizi = dvizi.succ;
- }
- while (first2 != null){
- if(first2.element == dvizi.element){
- first2 = first2.succ;
- }
- else {
- spoena.insertLast(first2.element);
- first2 = first2.succ;
- }
- }
- }
- System.out.println(spoena);
- }
- public static void main(String[] args) throws IOException {
- // write your code here
- SLL<Integer> lista1 = new SLL<>();
- SLL<Integer> lista2 = new SLL<>();
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- int n;
- n = Integer.parseInt(br.readLine());
- String line = br.readLine();
- String pom[] = line.split(" ");
- for(int i=0; i<n ; i++){
- lista1.insertLast(Integer.parseInt(pom[i]));
- }
- int m = Integer.parseInt(br.readLine());
- String line1 = br.readLine();
- String pom1[] = line1.split(" ");
- for(int i=0; i<m ; i++){
- lista2.insertLast(Integer.parseInt(pom1[i]));
- }
- //System.out.println(lista1);
- //System.out.println(lista2);
- SLLJoinLists(lista1,lista2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement