Сторнирование связанного списка - PullRequest
0 голосов
/ 20 октября 2019

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

//node is a datatype of struct *node and I have used typedef to make it simpler.    

node Reverse(node head)
{
node temp,prevnode=NULL;
node nextnode;
temp=head;
while(temp!=NULL)
{   
    nextnode=temp->next;
    temp->next=prevnode;
    prevnode=temp;
    temp=nextnode;
}
head=prevnode;
return(head);
}

1 Ответ

1 голос
/ 20 октября 2019

Итак, в основном вы просматриваете связанный список и делаете все ссылки точечными <- вместо ->.

Таким образом, цикл равен

Начиная с временного узла, который находится в заголовке

  • nextnode = Именно так, вы берете следующий узел в списке из текущего (временного)
  • Затем вы устанавливаететекущий узел находится рядом с предыдущим узлом
  • Затем вы устанавливаете предыдущий узел на текущий узел, чтобы вы могли перейти на
  • Затем вы меняете указатель на следующий узел

Если вы не начнете с установки следующего узла, вы перезапишите его на шаге установки следующего (по отношению к предыдущему узлу) текущего узла

Кроме того, причина, по которой вы получаете тольковывод 1 узла при удалении переменной nextnode заключается в том, что вы перезаписываете следующий узел в начале предыдущего узла, что является ничем. После этого вы переходите на тот узел ничего, который завершает цикл. Тогда ваша голова - это предыдущий узел, который является просто первым узлом, с которого вы начали.

...