Как я могу прочитать из файла и упорядочить содержимое этого файла в алфавитном порядке в связанный список? - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь создать класс LinkedList, который может быть добавлен в виде файла данных из содержимого. Я получаю исключение NullPointerException, и я не совсем уверен, почему. Есть ли лучший способ решить эту проблему без использования Collections.sort?

public class LinkedList {

    // Properties
    Node head;
    int count;

    // Constructors
    public LinkedList() {
        head = null;
        count = 0;
    }

    public LinkedList(Node newHead) {
        head = newHead;
        count += 1;
    }

    // Methods
    // add
    public void add(String newData) {
        Node temp = new Node(newData);
        Node current = head;

        while (current.getNext() != null) {
            current = current.getNext();
        }
        current.setNext(temp);
        count++;
    }

//================================================================================================

    public static void main(String[] args) throws IOException {
        // Access the contents of a file
        File file = new File("C:\\Users\\Marlene\\Workspace\\LinkedDict\\src\\com\\company\\unsorteddict.txt");
        Scanner scan = new Scanner(file);

        String fileContents = "";
        LinkedList linkedList = new LinkedList();

        com.company.LinkedList linkedList = new com.company.LinkedList();
        while (scan.hasNextLine()) {
            linkedList.add(fileContents);
        }

        FileWriter writer = new FileWriter(
                "C:\\Users\\Marlene\\Workspace\\LinkedDict\\src\\com\\company\\sorteddict.txt");
        writer.write(fileContents);
        writer.close();
    }
}

1 Ответ

0 голосов
/ 22 октября 2019

Исправление, отмеченное в комментарии.

    public void add(String newData) {
        Node temp = new Node(newData);
        if(head == null){                    // fix
            head = temp;
            count = 1;
            return;
        }
        Node current = head;
        while (current.getNext() != null) {
            current = current.getNext();
        }
        current.setNext(temp);
        count++;
    }

Для сортировки сортировка по слиянию снизу вверх для связанного списка является достаточно быстрой. Статья Wiki включает пример псевдокода:

https://en.wikipedia.org/wiki/Merge_sort#Bottom-up_implementation_using_lists

В зависимости от размера узлов может быть быстрее создать массив из списка, отсортировать массив, а затем создать новыйотсортированный список из отсортированного массива.

...