0
我想實現一個單鏈表的排序方法。該方法假設要通過列表,比較一對節點,並根據需要將其中的一個放在前面。它使用其他兩種方法: - 刪除()(從列表中刪除特定節點) - InsertFront()(在列表前面插入一個新節點。 這兩種方法都可以自行工作並編譯所有內容。爲什麼我的鏈接列表的排序方法不工作?
public Link remove(String lastName)
{
Link current_ = first_;
Link prior_ = null;
Link found_ = null;
while (current_ != null && current_.lastName.compareTo(lastName) != 0)
{
prior_ = current_;
current_ = current_.next;
}
if(current_ != null)
{
if(prior_ == null)
{
found_ = first_;
System.out.println(current_.next.lastName);
first_ = current_.next;
}
else if(current_ == last_)
{
found_ = last_;
Link hold_ = first_;
first_ = prior_;
first_.next = current_.next;
first_ = hold_;
}
else
{
found_ = current_;
Link hold_ = first_;
first_ = prior_;
first_.next = current_.next;
first_ = hold_;
}
}
return found_;
}
public void insertFront(String f, String m, String l)
{
Link name = new Link(f, m, l);
if (isEmpty())
{
System.out.println("Adding first name");
first_ = name;
last_ = name;
}
else
{
System.out.println("Adding another name");
Link hold_ = first_;
first_ = last_;
first_.next = name;
last_ = first_.next;
first_ = hold_;
}
}
我試圖修復它,但我始終運行在兩個不同的問題:
它的工作原理,但不插入鏈接回
public void Sort() { Link temp_; boolean swapped_ = true; while (swapped_ == true) { swapped_ = false; Link current_ = first_; String comp_ = current_.lastName; while (current_ != null && current_.lastName.compareTo(comp_) >= 0) { current_ = current_.next; } if (current_ != null) { temp_ = remove(current_.lastName); insertFront(temp_.firstName, temp_.middleName, temp_.lastName); swapped_ = true; } } }
我收到一個空指針異常。
Exception in thread "main" java. lang. NullPointerException at List $ Link . access $000(List . java : 25) at List . Sort (List . java:165) at main(java :79)
Java結果:1個
調試結果:
Listening on javadebug
Not able to submit breakpoint LineBreakpoint LinearGenericSearch.java : 28, reason: The breakpoint is set outside of any class.
Invalid LineBreakpoint LinearGenericSearch.java : 28
User program running
Debugger stopped on uncompilable source code.
User program finished
public void Sort()
Link temp_;
boolean swapped_ = true;
while (swapped_ == true)
{
Link current_ = first_;
swapped_ = false;
while (current_.next != null)
{
if((current_.lastName.compareTo(current_.next.lastName)) > 0)
{
temp_ = remove(current_.next.lastName);
insertFront(temp_.firstName, temp_.middleName, temp_.lastName);
swapped_ = true;
}
current_ = current_.next;
}
}
}
我的問題是:什麼是我做錯了什麼?有關如何避免下一次的建議?
如果有任何不清楚的地方請隨時詢問。 – codeMan