2012-12-16 68 views
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_; 
    } 
} 

我試圖修復它,但我始終運行在兩個不同的問題:

  1. 它的工作原理,但不插入鏈接回

    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; 
        } 
        } 
    } 
    
  2. 我收到一個空指針異常。

    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; 
      } 
     } 
    } 

我的問題是:什麼是我做錯了什麼?有關如何避免下一次的建議?

回答

相關問題