【发布时间】:2012-03-07 04:06:44
【问题描述】:
我的任务是创建自己的链表类(我不能使用 Java 的 LinkedList 类)并通过交换指针而不是数据来实现选择排序。
我创建了一个双向链接的 MyLinkedList 类,但我在使用排序方法时遇到了问题。我尝试了很多东西,但没有任何效果 - 甚至没有任何有意义的东西可以在这里发布以进行更正。 (我知道我至少需要使用一个临时节点。)它必须是选择排序。
我不是一定要找人为我编写代码;我希望有人可以帮助我使用一种算法,然后我可以自己将其转化为代码。非常感谢任何帮助。
以下是我如何实现 MyLinkedList 类和关联的 Node 类:
public class MyLinkedList
{
private Node head;
private int count;
public MyLinkedList()
{
head = new Node(null);
count = 0;
}
public void add(String line)
{
Node temp = new Node(line);
Node current = head;
while (current.getNext() != null)
{
current = current.getNext();
}
temp.setLine (line); // not sure this is how to do it
current.setNext(temp);
temp.setPrev(current);
count++;
}
public void displayList()
{
Node current = head;
for (int i = 0; i < count; i++)
{
current = current.getNext();
System.out.println(current.getLine());
}
}
public void sortList()
{
Node start = head;
Node index = start;
Node min = start;
Node temp1, temp2;
while (start.getNext() != null)
{
index = index.getNext();
if (index.getLine().compareTo(min.getLine()) < 0)
{
min = index;
}
//swap - HELP, PLEASE :-)
{
// Algorithm???
}
}
}
public int size()
{
return count;
}
private class Node
{
String textLine;
Node next;
Node prev;
public Node()
{
textLine = null;
next = null;
prev = null;
}
public Node (String line)
{
textLine = (line);
next = null;
prev = null;
}
public Node (String line, Node node1, Node node2)
{
textLine = line;
prev = node1;
next = node2;
}
public String getLine()
{
return textLine;
}
public Node getNext()
{
return next;
}
public Node getPrev()
{
return prev;
}
public void setLine(String line)
{
textLine = line;
}
public void setNext(Node nextNode)
{
next = nextNode;
}
public void setPrev(Node prevNode)
{
prev = prevNode;
}
}
}
【问题讨论】:
-
您的添加和删除方法在列表中是否正常工作?您是否尝试过先做一个愚蠢的排序方法并从那里开始工作?类似于制作一个新列表,然后每次只获取最小的条目?
-
还尝试制作可以完成选择排序所需的一切的方法,基本上将其分解为更小的问题。先做一个交换2个节点的方法,然后做一个找到某个节点的方法,再做一个找到最小节点的方法,再做一个找到给定节点之后的最小节点的方法。
-
首先,您的代码是否正确构建了列表?我的意思是您是否尝试在添加一些临时值后显示列表?
-
是的,我的代码可以正确构建和显示列表。 main 方法向用户询问文件名,然后读取文件并调用 add 方法将每一行存储在其自己的单独节点中。 displayList 函数将每个节点依次输出到屏幕上。
-
我建议你也保留对尾部(最后一个节点)的引用,它会优化你的添加方法
标签: java algorithm list sorting