Из связанного списка в массив (Функция) - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь дать функции список и создать массив, содержащий значения узлов списка (не сложно). Вот он:

public class MainClass {

    public static int[] makeListIntoArray(Node<Integer> n) {
        int[] arr1 = new int [countSizeOfList(n)];
        for(int i = 0; i < countSizeOfList(n); i++) {
            arr1[i] = n.getValue();
            n = n.getNext();
        }
        return arr1;
    }//EndOfFunction

    public static int[] finalFunction2(Node<Integer> n) {
        if(n == null) return ifListIsEmpty(n);
        return makeListIntoArray(n);
    }

    public static int[] ifListIsEmpty(Node<Integer> n) {
        Node<Integer> n2 = new Node<Integer>(999);
        int[] arr1 = new int [countSizeOfList(n2)];
        int i = 0;
        arr1[i] = n2.getValue();
        return arr1;
    }
    public static void main(String[] args) {

        Node<Integer> n1 = new Node<Integer>(5);
        Node<Integer> n2 = new Node<Integer>(4);
        Node<Integer> n3 = new Node<Integer>(3);
        Node<Integer> n4 = new Node<Integer>(5);
        Node<Integer> n5 = new Node<Integer>(1);
    


        n1.setNext(n2);
        n2.setNext(n3);
        n3.setNext(n4);
        n4.setNext(n5);
        
        System.out.println(finalFunction2(n1));

    }//Main

}//Class

Дело в том, что он печатает «[I@7960847b» рядом с фактическим массивом ... исправления?

Исправления?

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Если вы используете встроенную структуру данных LinkedList Java, вы можете просто использовать следующее для преобразования из LinkedList в массив:

Integer[] array = list.toArray(new Integer[list.size()]);

Итак, для ситуации, которую вы описываете, все для функции вам потребуется:

import java.util.LinkedList;

public class MainClass {
   public static int[] makeListIntoArray(LinkedList<Integer> list) {
       Integer[] arr = list.toArray(new Integer[list.size()]);
       int[] intArr = Arrays.stream(array).mapToInt(Integer::intValue).toArray();
       // Above line converts the wrapper Integer[] to int[] if you need that
       return intArr;
    }
}

Подробнее о методе toArray() LinkedList вы можете найти здесь .

1 голос
/ 03 августа 2020

Если вы хотите вставить значение в массив, тогда должен быть индекс, особенно статический c. Вы не можете просто назначить его arr1, как это делаете для примитивных типов.

Например, arr1 [0] = n.getValue () допустимо, но не arr1 = n.getValue ();

public static int[] makeListIntoArray(Node<Integer> n) {
    int[] arr1 = new int [countSizeOfList(n)];
    int idx=0;
    while(n != null) {
        arr1[idx++] = n.getValue();
        n = n.getNext();
    }
    return arr1;
}//EndOfFunction
0 голосов
/ 03 августа 2020

Если вы хотите сохранить связанный список, но также хотите получить доступ к элементам в O (1), вы можете создать массив узлов.

public class MainClass {

    public static Node<Integer>[] makeListIntoArray(Node<Integer> n) {
        Node<Integer>[] arr1 = new Node<Integer> [countSizeOfList(n)];
        int i=0;
        while(n != null) {
            arr1[i] = n;
            n = n.getNext();
            ++i;
        }
        return arr1;
    }//EndOfFunction

}//Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...