我想尝试一个函数来反转链表。 A查找了一些代码,但我不明白他们的算法。谁能解释一下这是如何工作的(替代解决方案)? A尝试了一些东西,但没有成功。
当前代码:
void rvrprint(struct node *go)
{
struct node *tmp;
struct node *onc=NULL;
struct node *snk;
tmp=go;
while(tmp!=NULL)
{
snk = tmp->next;
tmp->next=onc;
tmp=snk;
printf("%d\n",tmp->x);
}
head = tmp;
}
最佳答案
您可以将单链接列表视为堆栈。如果您这样做,那么您应该很快就会意识到,反转它的最简单方法是获取第一个节点并将其添加到新列表中(将节点推送到新堆栈上)。然后获取第二个节点并将其添加到新列表中(再次插入新堆栈)。
在此之后,您应该看到前两个节点的顺序颠倒了。当您浏览整个原始列表并将其节点“推”到新列表时,这将继续。
关于c - 反转单向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46790613/