2016-09-18 2 views
-1

스택에서 값의 모든 어커런스를 제거해야합니다. 이것은 내 코드이지만 어떻게 든 while 문에 문제가 있습니다. pTmpwhile (pTmp.Next != null)에서, 그래서C#에서 RemoveAll 메서드를 만드는 방법은 무엇입니까?

몇 가지 테스트 케이스에서

, 그것은 while 문을 강조하고 pTmp.Next.Next의 할당 된 값이 null이 될 수 있습니다 라인 pTmp.Next = pTmp.Next.Next;에서 나에게 처리되지 않은 예외 "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

를 던져 null이고 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