2014-10-25 3 views
1

현재 목록 앞에 짝수를 저장하고 뒤쪽에 홀수 정수를 저장하는 연결된 목록에서 작업하고 있습니다. 내 삭제 기능을 제외하고는 모든 것이 잘 작동하고있어 짝수 또는 홀수 정수를 삭제할지 여부에 대한 사용자 입력이 필요하며이를 사용자가 목록의 앞이나 뒤에서 삭제할 것인지 묻는 프롬프트로 사용합니다.노드 삭제 기능에 연결된 목록 문제

void Staque::pop(char EvenOrOdd) 
{ 
    if (!empty()) 
    { 
     if (EvenOrOdd == 'O' || 'o') 
     { 
      //Creating pointers to find end of Staque 
      Staque::NodePointer prevPtr = myTop, //Pointer to find penultimate Node and set "next" value to 0 
       currentPtr = myTop; //Pointer to find Node to delete 

      //Assigning pointers to corresponding nodes 
      while (prevPtr->next->next != 0) 
      { 
       prevPtr = prevPtr->next; 
      } 
      while (currentPtr->next != 0) 
      { 
       currentPtr = currentPtr->next; 
      } 

      //Deleting the last node in the Staque and setting "next" value of new end to 0 
      delete currentPtr; 
      prevPtr->next = 0; 
     } 
     else if (EvenOrOdd == 'e' || 'E') 
     { 
      Staque::NodePointer ptr = myTop; 
      myTop = myTop->next; 
      delete ptr; 
     } 
    } 
    else 
    { 
     cerr << "Stack is empty -- can't remove a value \n"; 
    } 

문제는 그것을 삭제하는 요소의 어떤 종류의 결정에 입력을하지 않는다는 것입니다 : 여기 내 노드 삭제 기능을 위해 가지고있는 코드입니다. 단지 노드 삭제 함수의 if 구문에서 첫 번째로 넣은 것을 삭제합니다. 만약 구조라면, 내가 확률을 삭제하기위한 코드 위에있는 evens를 삭제하는 코드가 있다면, 그것은 evens 만 삭제할 것이며, 그 반대의 경우도 마찬가지입니다. 제발 도와 줘, 내가 왜 이런 짓을하는지 알 수가 없어.

답변

2

변경

if (EvenOrOdd == 'O' || 'o') 

다른 유사한
if (EvenOrOdd == 'O' || EvenOrOdd == 'o') 

, else if (EvenOrOdd == 'e' || 'E')한다.

if (EvenOrOdd == 'O' || 'o') 

이이

01에있어서

if (EvenOrOdd == 'O' || true) 

에있어서

if (EvenOrOdd == 'O' || (bool)'o') 

에 동일


참고

+0

정말 고마워요. 내가 그렇게 여러 번 보았을 때 내 마음이 미끄러 진 것처럼 나는 믿을 수가 없다. 내 구문에 더주의를 기울일 필요가있다. –