2014-04-07 1 views
0

Может ли кто-нибудь помочь мне указать и объяснить логическую ошибку, которая у меня есть в этом круговом связанном списке? Заранее спасибо.C++ Ошибка связанного с круговой линией

template <class xtype> 
void clist<xtype>:: copylist (const clist<xtype> & other) 
{ 
    node<xtype> *temp; 
    node<xtype> *p; 

    if (head !=NULL) 
     makeEmpty(); 
    if (other.head == NULL) 
     head = NULL; 
    else 
    { 
     p = other.head; 
     head = new node<xtype>; 

     head->info = p->info; 
     temp = head; 

     p = p->next; 

     while(p != head) 
     { 
      temp->next = new node<xtype>; 
      temp = temp->next; 
      temp->info = p->info; 
      p = p->next; 
     } 
     temp->next = head; 
    } 
} 

ответ

0

Только быстрый взгляд на свой код, и я это пятно:

while(p != head) 

Вы должны испытывать other.head, не head.

+0

но зачем использовать другие.head вместо головы? – user3504938

+0

@ user3504938 Потому что 'p' выполняет итерацию через« другой »список. 'head' сам находится в списке, который вы создаете, и никогда не должен встречаться при пересечении' other'. – paddy