2014-09-30 3 views
0

여기, 함수 내부 삽입 내 코드나는 점 <strong>노드</strong>에 <strong>머리</strong>를 전달하는 경우

#include <stdio.h> 
#include <stdlib.h> 
struct ListNode { 
int val; 
ListNode *next; 
ListNode(int x) : val(x), next(NULL) {} 
}; 

void insert(ListNode *&head,int value) 
{ 
    ListNode *node; 
    node = head; 
    if(!node) 
    { 
     //node = new ListNode(value); 
     head = new ListNode(value); 
    } 
    else 
    { 
     while(node->next != NULL) 
      node = node->next; 
     node->next = new ListNode(value); 
    } 
} 
void print(ListNode *head) 
{ 
    ListNode *node = head; 
    for(;node!=NULL;){ 
     printf("%d ",node->val); 
     node = node->next; 
    } 
} 
int main(int argc,char *argv[]) 
{ 
    ListNode *head = NULL; 
    insert(head,0); 

    insert(head,1); 
    insert(head,2); 
    print(head); 
    return 0; 
} 

입니다, 그리고 노드 = 새 ListNode (값);, C++에서 함수 내에서 포인트 참조에 대한 혼란 스러워요 누군가 날을내는 데 도움이 희망을 남기고는, 삽입 작업이 실패하고 머리 내가 새로운 직접 머리에 메모리를 할당 사용 NULL.But 여전히 아웃.

+0

무엇을하고 있는지 이해하는 내 인라인 주석을 찾기 및 클래스와 함께 C++ 스타일을 사용하는 대신 전역 함수를 사용합니까? –

+0

@ Code-Apprentice ListNode 생성자와'operator new'의 사용법이 C++ 회랑을 따라 충분히 깊지는 않습니까? 적어도 이니셜 라이저 목록을 사용하고 있습니다.이 목록은 처음 시작할 때 가장 많이하는 것 이상입니다. – WhozCraig

+0

@WhozCraig'List' 클래스는 각 함수에'head' 포인터를 전달할 필요성을 없애고 각 함수 서명을 좀 덜 복잡하게 만듭니다. 또한'head'가 멤버 필드 일 가능성이 높으므로 여기에 표시된 문제를 제거합니다. –

답변

2

이 :

ptr = new whatever; 

어쩌면, 메모리를 할당하는 생성자를 호출하고 ptr에 새로운 값을 할당합니다.

이제 이들 두 가지 기능을 고려

void foo1(int &n) 
{ 
    int k=n; 
    k=5; 
} 

void foo2(int &n) 
{ 
    n=5; 
} 

제가 foo1

호출 후에, 난 (참조) 전달 된 변수의 값은 변하지 않는다. 내가 foo2를 호출 한 후, 그것은 5.

1

당신이 구조체와 프로그램의 C 스타일을 사용하여 데이터 구조를 구현하고있는 이유가 거기에 각 단계

node = head; //! Here your node pointer pointing to the memory pointed by head 
if(!node) //! You are checking if that memory is null or not 
{ 
    node = new ListNode(value); //! now you are pointing your node pointer to some newly allocated memory, there is no impact on head pointer. 
    //! If you want to change the head pointer also so 
    head = node; //! Now head also pointing to the newly allocated location. 
} 
+0

고마워요. ** 마침내 노드 ** 노드 **를 구현하지 않으면 ** 노드 **는 ** NULL **이 아닌 새 메모리 주소를 저장하고 ** 헤드 **는 여전히 상점 * * NULL ** 변경되지 않습니다. – user3219735

관련 문제