我正在做我的鏈接列表插入排序,我遇到了一個問題。InsertionSort鏈接列表,與來自文本文件的數據。 Java
我的數據文件:
Myjob 66
Junk 17
Fun 25
Vital 99
Important 96
MoreFun 28
Work 69
Assignment 44
這裏是我的插入代碼排序
public Node insertSort(Node node){
Node sortedNode = null;
while(node != null){
Node current = node;
node = node.next;
Node x;
Node previous = null;
for(x = sortedNode; x != null; x = x.next){
if(current.getData().getNum() > x.getData().getNum()){
break;
}
previous = x;
}
if(previous == null){
current.next = sortedNode;
sortedNode = current;
}
else{
current.next = previous.next;
previous.next = current;
}
}
sortedNode=head;
return sortedNode; }
我目前輸出:
Name = Myjob Priority=66
Name = Assignment Priority=44
Name = MoreFun Priority=28
Name = Fun Priority=25
Name = Junk Priority=17
null
他們跳過任何超過66更大千萬人有任何想法如何解決這個問題,所以它可以顯示從99下降到17?我嘗試重新排列文本文件中的順序,最先排在第一位。那麼程序可以完美地從99回到17。但是按照原始順序,我的程序只能執行從66到最低的排序。我不知道爲什麼,以及如何解決它?請幫忙。我在Java中很新。非常感謝。
我的數據類
public class Data {
private String name;
private int num;
public Data(){
}
public Data(String name,int num){
this.name=name;
this.num=num;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getNum(){
return num;
}
public void setNume(int num){
this.num=num;
}
public String toString()
{
return "Name = " + name + " Priority=" + num ;
}
}
這裏是我的LinkedList類:
public class LinkedList {
Node head;
Node prev;
Node cur;
public LinkedList(){
}
public LinkedList(Node head){
head = null;
}
//getter to get head
public Node gethead(){
return head;
}
public void printLinkedList(){
System.out.println(head);
}
public void initializeLL(){
Node currentNode = head;
try
{
File file = new File("Asg2Data.txt");
Scanner sc = new Scanner(file);
while (sc.hasNext())
{
Data d = new Data(sc.next(), sc.nextInt());
Node n = new Node(d);
if(currentNode == null){
currentNode = n;
head = n;
}else{
currentNode.setNext(n);
currentNode = n;
}
}
sc.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public static void main(String[] args) throws FileNotFoundException{
LinkedList l1 = new LinkedList();
l1.initializeLL();
l1.insertSort(l1.head);
l1.printLinkedList();
System.out.println("************");
}
}
這裏是我的節點類:
public class Node{
Data dt;
Node next;
public Node(){
}
public Node(Data dt){
this.dt=dt;
}
public Node getNext(){
return next;
}
public void setNext(Node next){
this.next=next;
}
public Data getData(){
return dt;
}
public void setData(Data dt){
this.dt=dt;
}
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append(dt).append(System.getProperty("line.separator"));
sb.append(next).append(System.getProperty("line.separator"));
return sb.toString();
}
}
的插入排序方法是LinkedList類裏面。
好像你的問題發生在你需要添加一個項目到列表的開頭。 – nhouser9
我也找到了。但我不知道如何修復我的代碼。你可以幫我嗎 ? –
@ nhouser9我剛添加了我的其他代碼。請看看和幫助。非常感謝。 –