2014-07-05 3 views
0

링크 목록 끝에 노드를 추가하고 싶습니다. 그래서 나는 같은 것을위한 방법을 만들었고 예상 된 결과를 얻는다. 그러나 나는이 프로그램이 옳았는지 확실치 않습니다. 프로그램이 정확한지 확인하십시오. 사전에링크 목록의 끝 노드에 요소를 삽입하십시오.

node *insert_end_node(node *nd, int value) { 
    node *tmp, *p; 

    tmp = (node *)malloc(sizeof(node *)); 

    tmp->data = value; 
    tmp->next = NULL; 
    p = nd; 
    while (p->next != NULL) { 
    p = p->next; 
    } 

    p->next = tmp; 

    // nd =tmp; 

    return nd; 
} 

감사

+0

포인트 1에 대해서는 목록이 비어 있는지 확인해야한다는 것을 알고 있습니다. 하지만 내 혼란은 p로 지정하고 p가 목록의 기본 addres를 보유하고 있는지 확인하는 것입니다. 끝 노드에 다른 노드를 추가해야하기 때문에 p-> next == null 인 마지막 노드로 이동하십시오. 그래서 내 질문은 코드 아래에 이러한 것입니다 : p-> 다음 = tmp; nd = p; // 혼동 return nd; // 예기치 않은 결과를 얻었습니다 코드는 아래 코드로 제공됩니다 p-> next = tmp; return nd; // 예상 결과를 얻었습니다 nd = p가 필요하지 않은 이유 – user3807640

답변

1

두 가지 : 당신은 매개 변수로 포인터를 받아 들일 때

  1. 하면, 당신은 항상 NULL 있는지 확인해야합니다. 귀하의 경우 nd == NULL 인 경우 NULL->next에 액세스하려고 시도하면 프로그램이 중단 될 수 있습니다.
  2. tmp = (node *)malloc(sizeof(node*))을 호출하면 노드 포인터가 아닌 노드에 충분한 메모리를 할당하려고합니다. 올바른 코드는 tmp = (node *)malloc(sizeof(node))입니다. tmp의 유형을 변경하려고해도 할당은 계속 작동하므로 더 나은 옵션은 tmp = (node *)malloc(sizeof(*tmp))으로 작성하는 것입니다.
+0

또한 malloc은 void *를 노드 *로 캐스팅 할 필요가 없기 때문에 (C에서) – perh

관련 문제