2016-09-18 4 views
-1

スタックから値のすべての出現を削除する必要があります。 これは私のコードですが、何とか私のwhile文に問題があります。C#でRemoveAllメソッドを作成するにはどうすればよいですか?

pTmp.Next.Nextの割り当てられた値がnullかもしれないpTmp.Next = pTmp.Next.Next;while (pTmp.Next != null)pTmpであるので、いくつかのテストケースでは、それは、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文を強調してくれ –

答えて

1

を投げますnullNextはありません。いくつかのテストケースでnull同様

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

OMGはありがとう「System.NullReferenceException」を与えます!私はそれを試して、それはもうエラーをスローされません..しかし、それは私のテストコードの出力があるので同じ方法で動作しません: 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あなたが不足している最初と最後のitemは 'pTmp.Next'の代わりに' else'ブロックの 'pTmp'だけを使います。 – Guy

関連する問題