2014-02-16 2 views
-1

이중 연결 목록에서 모든 짝수를 삭제하려고합니다.이중 링크 목록이 C++에서 짝수를 삭제합니다.

내가 같은 경우로 간주 한

:

  1. 빈 목록을
  2. 시작 부분에서 짝수, 마지막에
  3. 짝수 목록
  4. 의 중간에
  5. 짝수 목록에없는 짝수입니다.

아래 코드는 작동하지 않습니다. roperly : current->getNextLink() == NULL 목록의 마지막 항목에 대해 true로 평가됩니다

void DoublyList::deleteEvens() 
{ 

    if (first == NULL) { 
     cerr << "Empty List" << endl; 
    } 


    else { 
     Node *current = first; 
     bool found = false; 
     while (current != NULL && (!found)) { 
      Node *tCurrent = current; 
      if (current->getNextLink() == NULL) { 
       if (current->getData() % 2 == 0) { 
        first = NULL; 
        last = NULL; 
        delete current; 
        current = NULL; 
        count = 0; 
       } 
       else { 
        cerr << "Not in the list" << endl; 
        found = true; 
       } 
      } 

      else if (current == first && current->getData() % 2 == 0) { 
       first = first -> getNextLink(); 
       first->setPreviousLink(NULL); 
       current = current->getNextLink(); 
       delete tCurrent; 
       tCurrent = NULL; 
       -- count; 
      } 
      else if (current == last && current->getData() % 2 == 0) { 
       last = last->getPreviousLink(); 
       last->setNextLink(NULL); 
       delete current; 
       current = NULL; 
       -- count; 
      } 

      else if (current->getData() % 2 == 0) { 
       current->getPreviousLink()->setNextLink(current->getNextLink()); 
       current->getNextLink()->setPreviousLink(current->getPreviousLink()); 
       current = current->getNextLink(); 
       delete tCurrent; 
       tCurrent = NULL; 
      } 
      else { 
       current = current->getNextLink(); 
      } 
     } 
    } 
} 
+0

아래 코드는 제대로 작동하지 않습니다 .'_ 너무 모호한 질문입니다 ... –

+0

@ πάνταῥεῖ 프로그래밍을 배우기 시작한 것이므로 코드 이후에 특정 코드가 어떻게 작동하는지 몰라요. 어떤 때는 그렇지 않습니다 ... – Julie

+0

이것은 학교 프로젝트이므로 코드를 작성하지 않아야합니다. 하지만이를 해결하는 방법이 있습니다. 먼저 이중 연결된 목록에서 항목을 삭제할 수있는 함수를 작성하십시오. 그런 다음 테스트하십시오. 그런 다음 목록을 걷고 모든 짝수를 찾는 함수를 작성하십시오. 그것을 테스트하십시오. 그런 다음 둘을 결합하십시오. 하나의 거대한 단계로 그것을하려고하지 마십시오. –

답변

3

문제는 첫 번째 사례가 될 것으로 보인다. 따라서 마지막 항목을 처리 할 때 전체 목록을 효과적으로 삭제할 수 있습니다. 다른 방법

if (current->getNextLink() == NULL && current->getPreviousLink() == NULL)

또는 루프 외부로 이동하고 바로 첫 번째 변수를 사용

나는이이 목록의 첫 번째 항목을 감지로 변경하기위한 것입니다 가정합니다.

+0

감사합니다. 그것은 지금 완전하게 작동합니다! :) – Julie

+2

@ProgrammingLearning - STL과 친구가 되십시오. 많은 시간을 절약합니다. –

+0

@EhHeal 제안에 감사 드리며, 방금 배우기 시작했으며 더 많은 것을 탐구 할 것입니다! 귀하의 의견을 보내 주셔서 감사합니다! – Julie