Где я допускаю ошибку при создании этой функции для поиска элемента из односвязного списка в C ?

#c #linked-list

#c #linked-list

Вопрос:

Я пытаюсь создать функцию, которая выполняет поиск элемента из односвязного списка и возвращает адрес найденного значения. в противном случае возвращает null. Но когда я ввожу значение для поиска, выполняется поиск только значения в 1-м узле / позиции. Для всех остальных входных значений она возвращает NULL, и появляется сообщение «Элемент не найден», означающее, что это работает только для головного узла, но я не могу понять, почему. Я думал, что цикл while будет выполняться до конца, и если элемент соответствует данным в списке, он вернет адрес, которого вообще не происходит.

ВОТ МОЙ КОД:

 node *searchData(int key)
{
node *curNode=head; //head is global variable

 while (curNode!=NULL)
 {

  if(curNode->data==key)
     { 

       return curNode;
       break;

     }
else
return NULL;
curNode=curNode->link;
    }
}
  

МОЯ ОСНОВНАЯ ФУНКЦИЯ:

  cout<<"Enter The element to search?"<<endl;
        cin>>elem;
         b=searchData(elem);//use searchData function here

         if(b==NULL)
            cout<<"Item Not Found!!";
         else
                cout<<"Element "<<elem<<" was found at address:    "<<b<<endl;



}
  

Ответ №1:

 node *searchData(int key)
{
  node *curNode=head; //head is global variable

   while (curNode!=NULL)
   {

     if(curNode->data==key)
     { 
       return curNode;
       // break; // redundant, you have already returned.

     }
     // else // no need to guard code against True, True returned.

     // return NULL; // your not done going thru the linked list yet
     curNode=curNode->link;
   }
   return NULL; // went thru the list to no avail.
}
  

краткая версия

 node *searchData(int key)
{
  for( node *curNode=head; curNode!=NULL; curNode=curNode->link)
    if(curNode->data==key)
      return curNode;

  return NULL;
}