2014-11-05 61 views
-2

我正在使用鏈接列表。我正在嘗試創建一個循環鏈表,但我無法準確理解發生了什麼。我曾試圖將其映射出來,但最終我感到困惑。但我認爲我最大的問題在這裏請解釋這行代碼如何工作?

prevLoc,list,newNode和location都是鏈表節點。

這裏是我不明白的路線。 newNode鏈接設置爲空列表。 list = newNode是什麼意思?這是否意味着它是newNode的任何元素?

if(prevLoc == null) 
    { 
     newNode.setLink(list); 
     list = newNode; 
    } 

以下是有關引用的排序類/添加方法的其餘部分。

public class CRefSortedList<T extends Comparable<T>> 
    extends CRefUnsortedList<T> 
    implements ListInterface<T> 
{ 
    public CRefSortedList() 
    { 
     super(); 
    } 

    public void add(T element) 
    { 
     LLNode<T> prevLoc; 
     LLNode<T> location; 
     T listElement; 

     location = list; 
     prevLoc = null; 

     while(location != null) 
     { 
      listElement = location.getInfo(); 
      if(listElement.compareTo(element) < 0) 
      { 
       prevLoc = location; 
       location = location.getLink(); 
      } 
      else 
      { 
       break; 
      } 
     } 

     LLNode<T> newNode = new LLNode<T>(element); 

     if(prevLoc == null) 
     { 
      newNode.setLink(list); 
      list = newNode; 
     } 
     else 
     { 
      newNode.setLink(location); 
      prevLoc.setLink(newNode); 
     } 
     numElements++; 
    } 
} 
+0

嗯,我不確定這本書。而我的教授的「教學」則是讓我們直接從書中輸入代碼,而不是真正解釋或回顧發生的事情。因此我已經轉向堆棧溢出以獲得關於它的意義的一些指導 – twjohns29 2014-11-05 23:09:26

回答

1
if(prevLoc == null) { 

殼體prevLoc == null如果element比列表的頭部下只能發生。在這種情況下,元素必須添加到列表的頭部:這就是其他兩行的含義。

newNode.setLink(list); 
    list = newNode; 
} 

首先,我們創建了一個新的節點持有價值element和指向列表的頭部。然後,我們更新list(它必須是列表的頭部)以指向新創建的節點,因爲它現在是列表的第一個節點。

0

當在列表的頭部插入,節點你將需要在現有列表作爲它的尾巴,你需要重新設置頭指向新節點。所以我認爲在這種情況下「list」=「頭節點」。

0

list變量未在您提供的代碼中定義,因此我們無法對此進行更多猜測。但是,如果您的類正在編譯,那麼list必須從超類CRefUnsortedList繼承。據猜測,這是對列表頭節點的引用,並且您詢問的代碼是當您插入列表開頭時設置新的頭節點。

+0

對我來說,「list」是列表的頭部似乎很清楚。兩個提示:首先,這是用於初始化列表上的迭代的節點,其次是用於在列表元素<= list(0)' – Dici 2014-11-05 22:41:29

+0

@Dici的情況下指向列表的新頭的節點,if所提供的代碼在* right *的任何位置,然後'list'確實應該是超類對列表頭部的引用,正如你猜想的那樣,我猜到了。但是,我看到了太多糟糕的代碼,因此認爲代碼是正確的。 – 2014-11-05 22:45:44

+0

是的,列表來自未排序列表。 LLNode list; list = null; – twjohns29 2014-11-05 23:11:10