2016-12-08 1 views
0

연결된 목록의 첫 번째 값을 입력하면 콘솔에서 동일한 값을 두 번 씁니다. 예를 들어, a를 입력하면 aa를 쓴 다음 정상적으로 진행됩니다.LinkedList가 루트 값을 두 번 읽음

if (r == NULL) { // If our list is empty... 
    r = (node *) malloc(sizeof(node)); 
    r->x = i; 
    r->next = NULL; 
    r->prev = NULL; 
    iter = r; 
    last = r; 
    printf("%c", i); 
} 

if (iter == last) { 
    node* temp = (node *) malloc(sizeof(node)); 
    temp-> x = i; 
    temp->prev = last; 
    last->next = temp; 
    temp->next = NULL; 
    last = temp; 
    iter = last; 
    printf("%c", i); 
} 

어떻게 해결할 수 있습니까? 문자를 얻으려면 getch()을 사용했습니다.

+1

루프를 더 게시 할 수 있습니까? – Stefan

+1

'if (iter == last)'==>'else if (iter == last)' –

답변

3

목록에서 유용한 코드가 누락되었지만 기본적으로 두 노드 모두 if 블록이 실행되므로 루트 노드를 만들 때 항상 인쇄됩니다. 둘 다 실행하지 않으려면 두 번째 블록에 else if을 사용해보십시오.

0

두 번째 if 절 앞에 else를 추가하십시오. r은, 직후 다음, 이전의 경우 절에서 당신이

iter = r; 
last = r; 

를 다음을 수행 절

if(iter==last) 

을 규정 번째 경우의 조건 때문에 ITER는 동일 널 전적으로 가능하다 마지막으로 두 번째 if 절이 실행됩니다.

는 다른 방법으로 당신이 할 수있는 다음 :

  1. if 조항의 끝에 break 추가
  2. 그런 다음, 로컬 변수로 인쇄 (한 장소에 인쇄 할 것을 떨어져 저장하십시오 DRY principle) 및이 상황에 가장 적합한 IMHO