检查链接列表中的重复项

时间:2013-11-07 07:08:06

标签: c++ linked-list

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;
}

2 个答案:

答案 0 :(得分:1)

你没有检查内部循环中的空current(或runner)指针,这可能意味着迟早要么为空,然后你做

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

current = current->next;

取消引用空指针是未定义的行为,很可能会导致崩溃。

答案 1 :(得分:1)

逻辑错误。在while循环开始时current不等于runner,而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;