2017-09-24 32 views
0

我在計算機科學的第二年。我們的老師要求我們實現MyLinkedList類(即使它在C#中默認存在),以提高我們的編程能力(算法)。一個鏈表的C#大小(源代碼)

我能夠實現代碼的很大一部分並對其進行測試,但是我無法實現返回鏈表大小的函數。

這是我對我所做的遠:

class MyLinkedList 
{ 

    class Element 
    { 
     public float value; 
     public Element next; 
    } 


    Element first; 

    public MyLinkedList() 
    { 
     first = null; 
    } 

    public void add(float x) 
    { 
     Element e = new Element(); 
     e.value = x; 
     e.next = first; 
     first = e; 
    } 

    public float get(int i) 
    { 
     if (first == null) 
     { 
      throw new Exception("Empty list...no elements inside"); 
     } 
     Element tmp = first; 
     for (int j = 0; j < i; ++j) 
     { 
      tmp = tmp.next; 
      if (tmp == null) 
      { 
       throw new Exception("..."); 
      } 
     } 
     return tmp.value; 
    } 

    public int size() 
    { 
     // I'm completely lost on that one, I have no clue on how 
     // doing it. 
    } 

} 
class MainClass 
{ 
    public static void Main(string[] args) 
    { 
     //To test the code 

     MyLinkedList l = new MyLinkedList(); 
     l.add(3); 
     l.add(5); 
     l.add(8); 
     Console.WriteLine(l.get(0)); 
     Console.WriteLine(l.get(1)); 
     Console.WriteLine(l.get(4)); 
    } 
} 
+0

只有'增加'計數,當你添加項目和'減少',當你刪除它。 –

+0

爲什麼每次添加元素時都要先更改** **? – MickyD

回答

1

試試這個代碼:

public int size() 
{ 
    Element tmp = first; 
    int cnt =0; 
    while(temp != null) 
    { 
     cnt++; 
     temp = temp.next 
    } 
     return cnt; 

} 
+0

非常感謝!我花了2個小時試圖找出它^^ –

+0

請upvote並接受答案:0 –

2

我不是在我的機器,所以我沒試過這樣:

public int Count() 
{ 
    int count = 0; 
    Element e = first 
    while(e != null) 
    { 
      ++count; 
      e =e.next; 
    } 
    return count; 
} 

那是你需要的東西的靈魂。

+0

非常感謝您的幫助!我只是測試它,它工作得很好:) –

+0

太好了 - 看到有人打我吧!我發現筆記本電腦鍵盤非常難以輸入,並且我剛編輯了錯誤的文章。我希望任何正在審閱編輯的人都能將其恢復爲最初發布的內容! –

0

你爲什麼不使用一個字段來跟蹤的大小?添加元素時可以增加它,並在刪除時減少它。

class MyLinkedList 
{ 
    int size = 0; 

    public void add(float x) 
    { 
     size++; 
     .... 
    } 

    public void remove(float x) 
    { 
     size--; 
     ... 
    } 

    public int size() 
    { 
     return size; 
    } 

這只是一個想法..當然,你必須檢查你是否真的添加或刪除元素。例如:您正嘗試刪除不在列表中的元素)。這樣做可以避免每次調用size方法時計算大小。

+0

這個想法一點都不壞!我會做到這一點。每次更改列表中的元素時,比計算大小更實用。謝謝 :) –