2014-11-15 4 views
-2

링크 된 목록에서 노드를 추가하는 함수입니다.C 프로그램 연결 목록 구문

void addNode(struct Node *head, int n) { 
    Node *newNode = new Node; 
    newNode->data = n; 
    newNode->next = NULL; 

    Node *cur = head; 
    while(cur) { 
     if(cur->next == NULL) { 
      cur->next = newNode; 
      return; 
     } 
     cur = cur->next; 
    } 
} 

누군가가 while 조건을 알려줄 수 있습니까? 나는 노드를 추가 한 후 이전 노드의 주소를 NULL에서 다음 노드의 주소가 무엇이든간에 변경해야한다는 것을 알고 있습니다. 하지만 나를 혼란스럽게하는 것은 while 조건이 작동하는 방법입니다. 내 말은 '여기에있는 동안'이 의미하는 것은 ... 괄호 안의 조건이 아닌가?

+1

Stackoverflow는 숙제 응답 웹 사이트가 아닙니다. – Zak

+3

이 코드는 C가 아닙니다. 적절한 언어로 질문을 다시 찾거나 유효한 C 예제를 제공하십시오. –

답변

1

첫 번째 사항부터 C에서는 malloc() 및 그 친구들을 사용하여 메모리의 데이터 청크를 동적으로 할당합니다. 일반적인 관용구 같은 것입니다 :

Node *newNode = malloc(sizeof *newNode); 

돈 'free() 표준 기능에 의해 필요하지 않은 때의 할당을 해제하는 것을 잊지. 또한 항상 반환 된 값을 malloc()에서 확인하여 성공했는지 확인해야합니다.

while (cur) { 
    // ... 
} 

cur는 당신이 진실과 거짓 (더 정확하게 0 생각할 수에 캐스트에서 이러한 obtaintable를 제외하고, 거짓마다 다른 값으로 treatead 것을, 표현으로 평가된다 : 이제 다시 질문에

다른 유형, 예 : 0.0 (double)은 true로 처리됩니다. 이러한 양식 모두 의미 당신의 상황에서 동일

while (cur != NULL) { 
    // ... 
} 

: 그것은으로이 특정 루프의 상태를 쓸 실제로 더 자세한 설명 (첫 번째 모습에서 당신을 위해 아마 더 직관적)입니다.


while 루프가 전혀 cur (즉 head 매개 변수) 널 포인터 때 입력하지 될 수하는 것으로.

+1

또한 호출 코드에서 헤드를 업데이트 할 방법이 없으므로 빈 목록에서 코드가 제대로 작동하지 않습니다. –