2015-07-11 14 views
2

這是單鏈表實現的問題。不清楚爲什麼「開始」被分配/在第1行給出參考

說,定義了一個類Node。 現在,對於操作定義了另一個類LinkedList。我們將在開始位置添加元素。

class LinkedList { 
    protected Node start; 
    protected Node end; 
    public int size; 

    public LinkedList() { 
     start = null; 
     end = null; 
     size = 0; 
    } 

    //method for insert at start 
    public void insertAtStart(int value) { 
     Node nptr = new Node (value, null); 
     size++; 

     if (start == null) { 
      start = nptr; 
      end = start; //Line 1 
     } 
    } 

    // others method(omitted here) 
} 

我就在想,如果我們在1號線分配nptr本身end,會發生什麼?在這個問題上我不清楚。

+0

沒有。這是同一件事。 – RealSkeptic

+0

請正確格式化您的代碼並刪除語法錯誤('if(start = null)'確切地說是一個)。除此之外,將'start'或'nptr'分配給'end'正弦是相同的(在將'start'分配給'end'之前,您將'nptr'分配給'start' ...) 。 – Turing85

+0

代碼中的問題是什麼,我無法得到它? –

回答

0

這一行後:

start = nptr; 

變量start持有參考同一個對象作爲nptr,即在創建對象:

Node nptr = new Node (value, null); 

所以它並不重要,如果您致電end = startend = nptr,因爲end之後將包含相同的參考; nptr,endstart都將指向相同的對象。

0

在這種情況下,只應在第一次調用insertAtStart(int val)時更新結束參考變量,以維護對末端節點的引用。

如果您在第1行將nptr本身指定爲end,則最終參考變量將具有對新添加節點(它是該列表的第一個節點)的引用。

相關問題