我无法理解为什么我们在此函数中使用下一个节点,如果我们实际查看它,它不是必需的,但是当我尝试删除下一个节点指针时,程序只给我一个节点的输出。如果有人能向我解释我在这个程序中解释错误的内容并帮助我理解这个概念,那就太好了。
//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);
}
所以基本上你正在做的是遍历一个链接列表,并使所有链接都指向<-而不是->。
所以循环是
从位于头部的临时节点开始
- nextnode = 正是这样,您正在从当前(temp(中抓取列表中的下一个节点
- 然后,将当前节点的设置在上一个节点旁边
- 然后将上一个节点设置为当前节点,以便继续前进
- 然后,将指针更改为下一个节点
如果您没有从设置 nextnode 开始,您将在设置当前节点的下一个(到上一个节点(的步骤中覆盖它
此外,当您删除 nextnode 变量时,您只获得 1 个节点的输出的原因是您在开始时将下一个节点覆盖到上一个节点,这没什么。之后,你移动到那个 nothing 节点,这将结束循环。然后你的头是前一个节点,这只是你开始的第一个节点。