2013-08-18 1 views
1

연결된 목록의 시작 부분에 새 노드를 추가하고 인쇄하려고합니다. 하지만 내 코드는 C++에서 인쇄하는 동안 추가 된 데이터를 표시하지 않습니다.연결된 목록 형성에서 처음에 변수를 추가하는 코드는 무엇입니까?

struct node{ 
    int data; 
    node *next; 
}; 
void add_begin(node *S, int k) 
{ 
    node *T; 
    T=new (node); 
    T->data=k; 
    T->next=S; 
    S=T; 
} 
void print(node *S) 
{ 
    cout<<"Elements of the node :\n"; 
    while (S->next!=NULL) 
    { 
     cout<<S->data<<endl; 
     S=S->next; 
    } 
    cout<<S->data<<endl; 
} 

답변

1

나는 새에 업데이트 할 목록의 머리 인 node에서이 기능을 전달하고 새로운 데이터 인 int를 호출 할 것이다 당신이 전달 된 노드를 기대하고 있다고 가정하고 마디.

불행히도 그 일은 일어나지 않습니다. 함수 add_begin에는 목록의 첫 번째 노드에 대한 자체 포인터가 있으므로 S=T으로 업데이트하면 함수에서 포인터 만 업데이트되고 전달 된 포인터는 업데이트되지 않습니다.

전달할 포인터를 업데이트하려면 참조 (void add_begin(node *&S, int k))로 전달하거나 함수에서 새 노드 포인터를 반환하고 외부 포인터를 수동으로 할당해야합니다.

+1

+1 후자의 옵션 (새로운 헤드 포인터를 returing하고 * caller *를 사용하여 이전의 것을 덮어 쓰는 것)은 caller에게 onus가 link list 기능 API 노드 포인터를 관리해야합니다. 유감스럽게도 학계 기반의 링크 된 목록 코드에서이를 실제로 보는 것은 드문 일이 아닙니다. – WhozCraig