gpt4 book ai didi

java - 选择排序双向链表java

转载 作者:行者123 更新时间:2023-12-01 15:42:09 26 4
gpt4 key购买 nike

我需要使用选择排序对链接列表进行排序。但我不能使用集合。我在查找最小元素和创建新版本的排序列表时遇到麻烦。谢谢。

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

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

public boolean isEmpty() {
return first == null;
}

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

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

public void display() {
Node current = last;
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.previous;
}
}

由于 findSmallest 方法不工作,Sort 方法无法正常工作。我尝试通过创建一个新列表来实现排序,在该列表中以排序方式放置节点。而且它也不会脱离“While 循环”

        public void Sort() {
LinkedList list = new LinkedList();
Node toStart = last;
while (toStart!=null){
list.addLast(findSmallest(toStart).student);
toStart = toStart.previous;
}


}

它发送添加的最大元素,如果我手动将“最后”分配给“最小”,它将起作用。

        public Node findSmallest(Node toStartFrom) {
Node current = toStartFrom;
Node smallest = toStartFrom; //if i put here `last` it will work correctly
while(current != null) {
if (smallest.student.name.compareToIgnoreCase(current.student.name) > 0) smallest = current;
current = current.previous;
}
return smallest;
}

}

public class Node {
public Student student;

public Node next;
public Node previous;

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


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

static public Student createStudent() {
....
return student;
}
}

最佳答案

不使用双向链表可能会有所帮助,因为这样您需要维护的链接就会减少。另外,您可能在使用 findSmallest() 方法时遇到问题,因为您最初将当前节点和最小节点设置为同一节点,因此当执行 if(smallest.student.name.compareToIgnoreCase(current.student.name) > 0) 语句时您正在将学生的姓名与学生的同名进行比较。例如,如果设置为最小的节点的学生姓名为 John,则当前设置为同一节点,则当前的学生姓名也是 John。如果他们是同名的不同学生,则不是问题,但在您的代码中,他们是同一学生,并且当前节点和最小节点都指向同一节点。实际上,这个 if 语句总是错误的,并且您永远不会执行沿列表移动当前的代码。这也是为什么当您设置smallest=last时,该方法至少在某些时候确实有效。

关于java - 选择排序双向链表java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com