2016-10-25 4 views
1

여기에없는 내용을 집어 넣을 수는 없습니다.링크 된 목록에 끝 노드 추가

: 그럼 내가이 만든

void InsertBeginning(int val) { 
     Node *n = new Node(); 
     n->data = val;    
     n->next = A;   

     A = n;  
     DisplayList(); //prints list 
} 

그리고 지금은 내 목록의 마지막에 같은 일을하지만, 작업을 수행 할 : 내가 제대로 내 연결리스트의 시작 부분에 새 노드를 삽입하는 방법을 알고

void AddNode(int val) { 
     Node *n = new Node(); 
     n->data = val; 
     n->next = A; 

     //finds last empty node 
     while (n->next != NULL) { 
      n = n->next; 
     } 

     A = n; 

     DisplayList(); 
} 

하지만이 모든 작업은 첫 번째 노드를 제외한 모든 것을 삭제합니다.

답변

4

목록을 살펴본 다음 새 노드를 추가하십시오. 아마도 변경되지 않기 때문에 아마도 목록 헤드를 가리키는 A을 수정할 필요가 없습니다.

void AddNode(int val) { 
    Node *n = new Node(); 
    n->data = val; 
    n->next = NULL; 
    Node *pnt = A; 

    // If list is empty, new node becomes first node 
    if (!pnt) { 
     A = n; 
     return; 
    } 

    //finds last empty node 
    while (pnt->next != NULL) { 
     pnt = pnt->next; 
    } 

    pnt->next = n; 

    DisplayList(); 
} 
+2

그 편집도 컴파일되지 않습니다를 다음과 같이 (즉, 상황은 "목록의 첫 번째 노드"를위한 특수 처리를 피하기) 작동 할 수 있도록 일반적인 관용구 , 옳은 일을 혼자 내버려 두지 마라. E : 거기 있네. ;) –

+0

빈 목록으로 돌아 오기 전에 DisplayList()를 호출 할 수도 있습니다. ;) –

+0

리스트의'tail' 노드를 추적하면 더 이상리스트를 탐색 할 필요가 없으므로 끝에있는 삽입이 훨씬 더 빠르고 효율적이됩니다 : void AddNode (int val) {Node * n = 새로운 노드(); n-> data = val; n-> 다음 = NULL; if (! head) {head = n; } if (tail) {tail-> next = n; } 꼬리 = n; DisplayList(); }' –

0

하나가 균일하게 모든 경우를 처리

void AddNode(int val) 
{ 
    Node *n = new Node(); 
    n->data = val; 
    // Assuming that `n->next` is already null 

    Node **pnext = &A; 
    for (; *pnext != NULL; pnext = &(*pnext)->next); 

    *pnext = n; 

    DisplayList(); 
}