【发布时间】:2013-11-04 20:39:57
【问题描述】:
我在按字母顺序组织链表时遇到问题。我正在从文本文件中读取名称并将它们存储到链接列表中。我遇到的问题是如何按字母顺序对它们进行排序。如果有人能指出我正确的方向,那就太棒了。这个想法是获取每个名称中前 3 个字母的值,并将它们与下一个名称中的前 3 个字母进行比较。但是我会在哪里比较这些字母呢?
这里是 LinkedListNode 类:
public class LinkedListNode
{
private String data;
private LinkedListNode next;
public LinkedListNode(String data)
{
this.data = data;
this.next = null;
}
public String getData()
{
return data;
}
public LinkedListNode getNext()
{
return next;
}
public void setNext(LinkedListNode n)
{
next = n;
}
}
这里是带有main方法的LinkedList文件:
import java.io.*;
import java.util.Scanner;
public class LinkedList {
public LinkedListNode head;
String fname;
public static void main(String[] args) throws FileNotFoundException{
Scanner scan = new Scanner(new File("Names.txt"));
LinkedList l = new LinkedList();
int i = 1;
while(scan.hasNext()) {
String s = scan.nextLine();
l.insertBack(s);
i++;
}
System.out.print(l.showList());
}
public LinkedList() {
this.head = null;
}
public void insertBack(String data){
if(head == null){
head = new LinkedListNode(data);
}else{
LinkedListNode newNode = new LinkedListNode(data);
LinkedListNode current = head;
while(current.getNext() != null){
current = current.getNext();
}
current.setNext(newNode);
}
}
public String showList(){
int i = 0, j;
String retStr = "List nodes:\n";
LinkedListNode current = head;
while(current != null){
i++;
retStr += "Node " + i + ": " + current.getData() + "\n";
current = current.getNext();
}
return retStr;
}
}
【问题讨论】:
-
如果您想始终保持
List排序,那么您可以将算法基于插入排序。如果您只想排序一次,则只需使用快速排序等标准算法。 -
如果必须自己编写排序部分,那么我相信冒泡排序应该不难实现。
-
在所有节点都构建完成后以及打印列表时,我会在 showList 函数中调用排序吗?
-
您需要向我们提供更多信息。阅读我的评论。您是要始终对列表进行排序,还是要在最后进行排序?
-
在这种情况下,您需要在添加元素时进行插入排序 - 请参阅 Cruncher 的答案以了解从哪里开始。
标签: java linked-list nodes