2011-09-25 4 views
1

저는 잠시 동안이 작업을 해왔고 무엇이 잘못되었는지를 파악할 수 없습니다. 이 addSorted 함수는 정렬 된 배열의 해당 위치에 올바른 값을 모두 추가하지만 목록의 앞에 0을 추가하면 프로그램이 종료되지 않고 결과가 표시되지 않습니다. 누구든지 이것이 왜 일어날 수 있는지에 대한 단서가 있습니까?링크 된 목록과 addSorted 함수 문제를 정렬했습니다.

void addSorted(Data * newData){ 
    if(head == NULL) { 
     head = new LinkNode(newData); 
     return; 
    } 
    LinkNode * current = head; 
    LinkNode * previous = NULL; 
    while(current != NULL) { 
     if(newData->compareTo(current->data) == -1) { 
      LinkNode * newNode = new LinkNode(newData); 
      newNode->next = current; 
      if(previous == NULL) { 
       current->next = newNode; 
      } 
      else { 
       newNode->next = previous->next; 
       previous->next = newNode; 
      } 
     return; 
     } 
    previous = current; 
    current = current->next; 
    } 
previous->next = new LinkNode(newData); 
} 

답변

0

compareTo가 -1이면 현재 노드보다 작습니까?

이전에 == NULL 인 경우 newNode-> next가 현재 노드를 가리키고 있기 때문에 current-> next가 newNode를 가리 키도록 설정합니다. 즉, 서로를 가리키고 있음을 의미합니다.

나는이 문제의 근원이 실제로있을 것이라고 생각합니다.

 newNode->next = current; 
     current->next = newNode; 

바라건대이 방법을 사용하면 내가 무엇을 말하고 있는지 알 수 있습니다.

+0

예. IT가 작동합니다. 정말 고맙습니다. 난 그냥 current-> next = newNode를 head = newNode로 변경해야했다. – BleuCheese

+0

테디 베어를 찾아 문제의 원인을 설명하고 대부분의 오류를 발견 할 수 있습니다. 나는 테디 베어 대신 동료들을 사용합니다. 같은 결과입니다. :) –

+0

http://c2.com/cgi/wiki?RubberDucking, http://en.wikipedia.org/wiki/Rubber_duck_debugging – sehe