Возвращает указатель любого выбранного индекса в круговом односвязном списке

Я разработал этот код так, чтобы я мог получить указатель на любую позицию, которую пользователь хочет в круговом односвязном списке, я использую cout для возврата указателя, я хочу такой механизм, чтобы я мог использовать его с моей другой функцией вместо переписывания снова весь код, для этого мне нужно сделать что-то с типом возврата, который сейчас является недействительным

Вот функция ..

void pointer_to_node(int index){
Node*temptr;
temptr = new Node;
temptr = firstptr;

Node*temptr2;
temptr2 = new Node;
temptr2 = NULL;
int count = 1;

while (temptr!=temptr2){
if(count==index){
cout << "Required Pointer is : ";
cout<< temptr;}

count++;
temptr2=firstptr;
temptr=temptr->nextptr;
}

if (index>size_of_list())
{
temptr=NULL;
cout<< "Can't You think in bounds. Take your NULL Pointer ";
cout << temptr;
delete temptr;
delete temptr2;
}
}

1

Решение

Вам просто нужно вернуть Node *,

Тем не менее, пока вы делаете это, вам также нужно вынуть это: temptr = new Node; линии, а также deleteс, как вы там утечка памяти. Вы просто немедленно отбрасываете эти новые узлы, переназначая указатели. deletes в конце полностью удалит неправильные узлы и в любом случае вызывается не во всех случаях.

И если вы передадите индекс 0, ваш цикл действительно может занять очень много времени.

Я полагаю, что у вас есть веская причина для возврата NULL, если вы перебираете список.

Что-то вроде следующего должно быть достаточно:

Node *pointer_to_node(int index)
{
Node *temp = firstptr;
while(index-- != 0) {
temp = temp->nextPtr;
if(temp == firstptr) return NULL;
}
return temp;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]