Я пытаюсь реализовать собственную версию связанного списка для обучения. У меня есть следующий код.Функция reverseList работает правильно, и если я распечатаю ее внутри этой функции, это хорошо.
Однако, когда я покидаю функцию и затем вызываю метод print, я получаю первое значение, а затем ничего (ноль).Я предполагаю, что когда я выхожу из функции, она возвращает меня к первоначальному первому ([99]) элементу, который теперь фактически является последним элементом.Поэтому мой метод печати выводит, что элемент видит нулевое значение следующим и завершается.
Или я думал, что изменения, которые я делал в функции, были каким-то образом только в области действия этой функции, даже если я передал указатель, но это неЭто не имеет смысла, потому что если это так, то я должен иметь все исходные данные.
struct ListNode
{
int value;
ListNode* next = NULL;
};
void insertRecList(ListNode* list, int value)
{
if(list->next == NULL)
{
ListNode* end = new ListNode;
end->value = value;
list->next = end;
}
else
insertRecList(list->next, value);
}
void printList(ListNode* list)
{
std::cout << list->value << std::endl;
while(list->next != NULL)
{
list = list->next;
std::cout << list->value << std::endl;
}
}
void reverseList(ListNode* list)
{
ListNode* next;
ListNode* prev = NULL;
ListNode* cur = list;
while(cur != NULL)
{
if(cur->next == NULL)
{
cur->next = prev;
break;
}
else
{
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
}
list = cur;
std::cout << cur->value << " list:" << list->value << std::endl;
}
void testLinkedList()
{
srand(time(NULL));
ListNode nodes;
nodes.value = 99;
int val;
for(int i = 0; i < 5; i++)
{
val = rand() % 30 + 1;
insertRecList(&nodes, i);
//insertList(&nodes, val);
}
printList(&nodes);
reverseList(&nodes);
printList(&nodes);
}
int main()
{
testLinkedList();
return 0;
}
Благодарю за любую помощь, которую вы, ребята, можете оказать мне,
Спасибо!