2013-02-19 4 views
0

삽입 방법은 P가 첫 번째 값 (0)을 취하고 15가 링크 목록의 마지막 값이되어야합니다. 그러나, 내 목록을 인쇄 할 때 p-prev 대신 su를 사용하여 항목을 인쇄해야하며 15, 14, 13을 출력합니다. 이게 옳은 거니? 또는 내 함수를 잘못 구현하고 있습니까?이중 링크 목록 만들기. 처음 15 개 노드 초기화

class Node{ 
     public: 
      int value;  
      Node *succ; 
      Node *prev;  
        Node(int val, Node *s=NULL, Node *p=NULL) 
         :value(val),succ(s),prev(p){} 

    Node *insert(Node *p,Node *n) 
    { 
     if(n==NULL) 
      return p; 
     if(p==NULL) 
      return n; 
     n->succ=p; 
     if(p->prev) 
      p->prev->succ=n; 
     n->prev=p->prev; 
     p->prev=n;   
      return n; 
    } 

    int main(int argc, char *argv[]) { 
    Node *p= NULL; 

    for(int i = 0; i<=15; i++){ 

    p = insert(p, new Node(i)); 
    } 

while(p){ 
    cout<<p->value; 
    head=p->succ; 
} 

답변

1

노드를 처음에 추가합니다. 그래서 마지막으로 추가 된 것이 첫 번째 일 것입니다. 추가 한 순서대로 노드를 원할 경우 끝에 노드를 추가해야합니다.

Node *insert(Node *p,Node *n) 
{ 
    Node * ptr; 

    if(n==NULL) 
     return p; 

    if(p==NULL) 
     return n; 

    ptr = p; 

    // Traverse to the end of the list 
    while(ptr->succ) 
    { 
     ptr = ptr->succ; 
    } 

    ptr->succ = n; 
    n->prev = ptr; 

    return p; 

} 
+0

왜 downvotes? 이유를 설명해 주시겠습니까? – user93353