2017-10-28 15 views
0

단일 연결 목록에 새 노드를 삽입하는 기능을 사용했지만 삽입 후 노드 내부의 모든 값을 인쇄 할 때만 값을 가져옵니다. 첫 번째 노드 :c : 함수를 사용하여 단일 연결 목록에 새 노드 삽입

// Make list 
createList(head, 17); 

// Insert to list 
for (int x = 9; x > 0; x /= 3) 
{ 
    if (!insertToList(head, x)) 
    { 
     fprintf(stderr, "%s", error); 
     return 1; 
    } 
} 

함수 :

bool insertToList(NODE *head, int value) 
{ 
    NODE *node = malloc(sizeof(NODE)); 
    if (node == NULL) 
     return false; 

    node -> number = value; 
    node -> next = head; 
    head = node; 
    return true; 
} 

- 출력 : 17

것은 내가 기능을 사용하지 않는, 그리고 모든 것이 NG는 예상대로 작동합니다

// Make list 
createList(head, 17); 

// Insert to list 
for (int x = 9; x > 0; x /= 3) 
{ 
    NODE *node = malloc(sizeof(NODE)); 
    if (node == NULL) 
    { 
     fprintf(stderr, "%s", error); 
     return 1; 
    } 

    node -> number = x; 
    node -> next = head; 
    head = node; 
} 

- 출력 : 1 3 9 17

이유는 무엇입니까?

+1

'head' 포인터의 복사본 만 수정했기 때문입니다. – ilotXXI

답변

1

포인터를 함수에 전달하고 업데이트하고 다시 반환하지 않으면 외부 함수는 머리가 변경되었는지 여부를 알 수 없습니다. for 루프에서도 헤드를 적절하게 업데이트해야합니다.

함수를 사용하지 않는 경우 for 루프는 삽입 할 때마다 올바른 주소를 알고 있습니다.

헤드 포인터를 반환하고 제대로 업데이트하면 문제가 해결 될 것입니다.

+0

대단히 고맙습니다. 귀하의 솔루션으로 제 문제가 해결되었습니다. – taoufeqreda