2013-11-07 12 views
0
bool isduplicate 

if(p==nullptr) { 
    p->next=q; 
    q->value=x; 
} 

    while (p!=nullptr) { 
    p=p->next; 
    } 
    //arrived at NULL ptr 
    p->next=q; 
    q->value=x; 
    q->next=nullptr; 

    return q; 
} 
+0

Вы отлаживаете и проверяете свои указатели? где он падает и когда? почему вы смешиваете 'nullptr' и' NULL'? –

ответ

1

Логика неправильная. current не равен runner в начале вашего цикла while, и ничто внутри цикла while никогда не сделает их равными друг другу. В конце концов вы собираетесь разыменовать нулевой указатель.

Правильная логика проще, чем у вас. Попробуйте это

current = p; 
while (current != nullptr) 
{ 
    runner = current->next; 
    while (runner != nullptr) 
    { 
     if (runner->value == current->value) 
      return true; 
     runner = runner->next; 
    } 
    current = current->next; 
} 
return false; 
1

У вас нет проверки на нуль current (или runner) указателя во внутреннем контуре, что, вероятно, означает, что рано или поздно либо будет нулевым, а затем вы сделать

if(runner->value == current->value) 

или

current = current->next; 

Разыменование пустой указатель неопределенное поведение и, скорее всего, вызовет сбой.

Смежные вопросы