扭转一个链接列表的方式

时间:2017-10-17 12:52:03

标签: c

我想尝试一个函数来反转链表。查找了一些代码,但我不了解他们的算法。任何人都可以解释这是如何工作的(治疗解决方案)?尝试过的事情,但没有奏效。

当前代码:

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;
}

2 个答案:

答案 0 :(得分:1)

您可以将单链接列表视为堆栈。如果你这样做,你应该很快就会意识到,最简单的方法就是取出第一个节点并将其添加到一个新列表中(节点推送到新的堆栈上)。然后取第二个节点并添加到新列表(再次推入新堆栈)。

在此之后你应该看到前两个节点的顺序是相反的。当您浏览整个原始列表时,这将继续,并将其“推送”到新列表中。

答案 1 :(得分:0)

我认为你正在努力实现这个目标:

enter image description here

但正如你所说的那样:你的代码无效!

好吧,你错过了循环中的一个重要步骤。

您应该能够通过研究上面的图纸并与您的代码进行比较来找到它。如果没有,请发表评论: - )

顺便说一句:这看起来也错了

head = tmp;

tempNULL