c - 反转单向链表

标签 c

我想尝试一个函数来反转链表。 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/

相关文章:

运行该程序时需要常量表达式错误

c - 为什么当我试图获得 60 时 FPS 显示 30?

c - 使用移位/屏蔽遇到奇怪的行为

c - 如何识别接入点中 UDP 数据包的来源?

c++ - 结构体上的指针运算

c - 在 GCC 中使用另一个汇编程序(MASM、NASM、TASM 等)

C - 创建一个 sockaddr 结构

c - 如何为我的操作系统读取和播放音频文件?

c - 如何调整 VirtualAlloc 分配的区域?

c - 将 Vala 与 C 结合使用时出现内存泄漏