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