我想尝试一个函数来反转链表。查找了一些代码,但我不了解他们的算法。任何人都可以解释这是如何工作的(治疗解决方案)?尝试过的事情,但没有奏效。
当前代码:
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;
}
答案 0 :(得分:1)
您可以将单链接列表视为堆栈。如果你这样做,你应该很快就会意识到,最简单的方法就是取出第一个节点并将其添加到一个新列表中(将节点推送到新的堆栈上)。然后取第二个节点并添加到新列表(再次推入新堆栈)。
在此之后你应该看到前两个节点的顺序是相反的。当您浏览整个原始列表时,这将继续,并将其“推送”到新列表中。
答案 1 :(得分:0)