2016-09-18 85 views
-1

它應該從堆棧中刪除所有的值。 這是我的代碼,但它以某種方式與我的while語句有問題。如何在C#中創建RemoveAll方法?

在一些測試情況下,它凸顯了while語句把我扔了一個未處理的異常「System.NullReferenceException」

public bool RemoveAll(T value) 
{ 
    if (Count == 0) 
     return false; 

    if (Count == 1) 
    { 
     if (mTop.Data.Equals(value)) 
     { 
      mTop = mTop.Next; 
      return true; 
     } 
    } 

    else 
    { 
     OurListNode<T> pTmp = mTop; 
     while (pTmp.Next != null) 
     { 
      if (pTmp.Next.Data.Equals(value)) 
      { 
       pTmp.Next = pTmp.Next.Next; 
      } 
      pTmp = pTmp.Next; 
     } 
     return true; 
    } 
    return false; 
} 
+0

在一些測試情況下,它凸顯了while語句,並給我一個「System.NullReferenceException」 –

回答

1

在行pTmp.Next = pTmp.Next.Next;pTmp.Next.Next所分配的值可能是null,所以在while (pTmp.Next != null)pTmpnull,沒有Next。檢查其null以及

while (pTmp != null && pTmp.Next != null) 
+0

OMG謝謝!!我試過了,它不會再拋出一個錯誤..但它仍然不能以我想要的方式工作,因爲我的測試代碼的輸出是: 2:1:3:2:3:2:1: 2 removeall過#1 2:3:2:3:2:2 的removeAll#3 2:2:2:2 removeall過#2 2:2 –

+0

@Angela你缺少第一個和最後項目,而不是'pTmp.Next'只在'else'塊中使用'pTmp'。 – Guy