Выбор Сортировать DLinked список - PullRequest
1 голос
/ 29 октября 2011

Я реализую сортировку Selection в двусвязном списке.Я должен отсортировать список по фамилиям, найдя наименьший элемент и вставив его в начало списка.Но есть некоторые проблемы, когда я запускаю свою программу, у меня есть исключение NIL в методе сортировки в цикле while.Это целое приложение, так что вы можете скомпилировать его и запустить, если хотите.Помощь будет оценена.Спасибо.

    public class LinkedList {
        public Node first;
        public Node last;

        public LinkedList() {
            first = null;
            last = null;
        }

        public void addFirst(Student student) {
            Node f = first;
            Node newNode = new Node(student);
            first = newNode;
            if (f == null) last = newNode;
            else {
                f.previous = newNode;
                newNode.next = f;
            }
        }

        public void addLast(Student student) {
            Node l = last;
            Node newNode = new Node(student);
            last = newNode;
            if (l == null) first = newNode;
            else {
                l.next = newNode;
                newNode.previous = l;
            }
        }

        public void display() {
            Node current = first;
            while (current != null) {
                System.out.print(current.student.name + "\b");
                System.out.print(current.student.surname + "\b");
                System.out.println(current.student.educationType);
                current = current.next;
            }
        }

        public Node findSmallest(Node startNode) {
            Node smallest = startNode;
            while (startNode.next != null) {
                if (smallest.student.surname.compareToIgnoreCase(startNode.next.student.surname) > 1)
                    smallest = startNode.next;
                else startNode = startNode.next;
            }
            return smallest;
        }

        public void Sort() {
            LinkedList newList = new LinkedList();
            Node current = first;

            while (current.next != null) {
                Node smallest = findSmallest(current);
                newList.addLast(smallest.student);
                delNode(smallest);
                current = current.next;

            }
            first = newList.first;
            last = newList.last;
        }

        public void delNode(Node toDel) {
            if (toDel.previous == null) {
                toDel.next.previous = null;
                first = toDel.next;
                return;
            }

            if (toDel.next == null) {
                toDel.previous.next = null;
                last = toDel.previous;
                return;
            }
            toDel.previous.next = toDel.next;
            toDel.next.previous = toDel.previous;
        }

}


public class Student {
    public String name;
    public String surname;
    public String educationType;

    static public Student createStudent() {
        Student student = new Student();
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter student's name:");
            student.name = br.readLine();
            System.out.println("Enter surname:");
            student.surname = br.readLine();
            System.out.println("Enter educational type:");
            student.educationType = br.readLine();
        } catch (IOException e) {
            throw new NotImplementedException();
        }
        return student;
    }
}


public class Node {
    public Student student;

    public Node next;
    public Node previous;

    public Node(Student student) {
        this.student = student;
    }
}

1 Ответ

1 голос
/ 30 октября 2011

Я не запускал его, так что я просто смотрю на ваш код:

  1. На самом деле это не сортировка выбора, поскольку вы создаете новый список вместо того, чтобы сортировать старый список на месте.

  2. delNode () потерпит неудачу с NPE для списка из одного элемента, так что, возможно, это не так (это также не удастся, если вы удаляете последний элемент).

  3. Если вам не разрешено, используйте часовых.

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