2015-10-14 43 views
0

問題是這樣的: 定義一個構造函數,它將TreeSet作爲參數並使用該元素中的元素初始化鏈接列表。新列表必須按增加的詞典順序排序。使用樹中的元素初始化鏈接列表設置

此方法是使用下面的類來實現:

public class LinkedList<T extends Comparable<T>> { 
    private class Node{ 
     private T data; 
     private Node next; 

     private Node(T data){ 
      this.data = data; 
      next = null; 
     } 

    } 

    private Node head; 

    public LinkedList(){ 
     head = null; 
    } 

現在我知道一個TreeSet固有排序,因此所有我真的要在這裏做的是從TreeSet中取元素,並把它到這個鏈表的前面。但是我無法從集合中檢索元素並將其添加到LinkedList中。我寫了一個私人助手添加(T數據)方法並使用它,但我不知道這是我應該如何處理它。我對數據結構很陌生,所以對集合及其實現沒有多少想法。

public class LinkedList<T extends Comparable<T>> { 
    private class Node{ 
     private T data; 
     private Node next; 

     private Node(T data){ 
      this.data = data; 
      next = null; 
     } 

    } 

    private Node head; 

    public LinkedList(){ 
     head = null; 
    } 

    public void add(T data){ 
     Node n = new Node(data); 
     if(head == null){ 
      head = n; 
     } 
     else{ 
      n.next = head; 
      head = n; 
     } 
    } 

    public LinkedList(TreeSet<T> test){ 
     Iterator<T> itr = test.iterator(); 
     while(itr.hasNext()){ 
      this.add(itr.next()); 
     } 
    } 
+0

好工作?你應該有一個問題,不只是轉儲一堆代碼,並說「如此,whatcha認爲?」。 – Kayaman

+0

我的確提到過它的作用。我只是想看看是否有更好的方法來做到這一點,或者這是否是「慣例」。我剛剛飛過它。 –

回答

1

您必須解決的主要問題是您需要將每個項目添加到列表的末尾而不是開始。

添加到列表的開始節點很簡單:

public void addToHead(T data) { 
    Node node = new Node(data); 
    node.next = head; 
    head = node; 
} 

添加到到底是更難,因爲你沒有尾巴的參考。但是解決方案非常簡單:在您正在開發的構造函數中,保留對列表尾部的引用,以便您可以將每個值添加到鏈接的末尾而不是開頭。

0

問題包括「增加詞典順序」。

我的解決方法是不使用輔助方法:

public LinkedList(TreeSet<T> test){ 
     Node currNode = null; 
     for(T data : test) { 
      Node newNode = new Node(data); 
      if(head == null) { 
       head = newNode; 
       currNode = head; 
      } 
      else { 
       currNode.next = newNode; 
       currNode = currNode.next; 
      } 

     } 
    }