我正在使用java中的链接列表。我们的任务是从头开始创建一个,将用户输入(字符串)按字母顺序排序。我一直在尝试很多东西,但我提出的概念似乎都没有用。任何建议/提示将不胜感激。
package linkedlist;
public class Linked {
Node head;
int listCount;
public Linked(){
head = new Node(null);
listCount = 0;
}
public void add(String data){
Node linkedTemp = new Node(data);
Node linkedCurrent = head;
while (linkedCurrent.getNext() != null) {
linkedCurrent = linkedCurrent.getNext();
}
linkedCurrent.setNext(linkedTemp);
listCount++;
}
public void add2(String data){
Node linkedTemp = new Node(data);
Node linkedCurrent = new Node(get(1));
if(listCount >= 1){
while (linkedCurrent.getNext() != null){
if(linkedCurrent.getData().compareTo(linkedTemp.getData()) <= 0){
linkedCurrent.setNext(linkedTemp);
listCount++;
break;
}
if(linkedCurrent.getData().compareTo(linkedTemp.getData()) >= 0)
linkedCurrent = linkedCurrent.getNext();
}
}
}
public String toString() {
Node linkedCurrent = head.getNext();
String output = "";
while (linkedCurrent != null) {
output += "[" + linkedCurrent.getData().toString() + "]";
linkedCurrent = linkedCurrent.getNext();
}
return output;
}
public String get(int index)
{
if (index <= 0)
return null;
Node linkedCurrent = head.getNext();
for (int i = 1; i < index; i++) {
if (linkedCurrent.getNext() == null)
return null;
linkedCurrent = linkedCurrent.getNext();
}
return linkedCurrent.getData();
}
}
答案 0 :(得分:0)
除了排序不起作用外,我认为您的代码没问题。例如,
public static void main(String[] args) {
Linked linked = new Linked();
linked.add("data3");
linked.add("data2");
linked.add("data1");
System.out.println( linked );
System.out.println( linked.get(1) );
System.out.println( linked.get(2) );
System.out.println( linked.get(3) );
System.out.println( linked.get(4) );
}
以上测试代码给出了符合我们期望的输出。
[data3][data2][data1]
data3
data2
data1
null
但正如我告诉你的那样,事情是问题的排序部分没有解决。为了解决这个问题,我认为你应该修改代码的“添加”部分。您的add
方法不考虑插入项目的顺序。
public void add(String data){
Node linkedTemp = new Node(data);
Node linkedCurrent = head;
Node linkedPrev = head;
while ( linkedCurrent != null ) {
if ( linkedCurrent.getData() != null && linkedCurrent.getData().compareTo(data) > 0 ) {
break;
}
linkedPrev = linkedCurrent;
linkedCurrent = linkedCurrent.getNext();
}
linkedTemp.setNext( linkedPrev.getNext() );
linkedPrev.setNext(linkedTemp);
listCount++;
}
当您的代码使用包含无意义数据的“null head”时,if
语句中添加的while
块会检查linkedCurrent.getData()
是否为空。
对add
方法进行上述修改后,输出变为:
[data1][data2][data3]
data1
data2
data3
null