欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

翻转单向链表

程序员文章站 2024-01-15 12:45:46
...

#引子

之前在哔哩哔哩复试时,面试官给我出了一道简单的数据结构题:翻转单链表。但是我在写代码之前询问了一下,结果是要求节点值改变还是整个链接顺序都要变。他说就简单改变值嘛!(估计问这个问题时被鄙视了)于是我就用了一个数组来存放遍历链表所得到值,然后反序赋值来解决问题。(很low,/(ㄒoㄒ)/~~)

这篇文章就通过改变整个链接顺序来实现翻转单向链表做一个简单的分析与实现,也算是对这道题做出一个合适的解答。

#实现

整个解题思路可以对应于下面这张图:

翻转单向链表

代码实现如下:(贴出功能函数的实现)

struct Node * reversedNodeTree(struct Node *node) {
    if (node == NULL) {
        return NULL;
    }

    // 应将next指针放在此处,避免在每次循环时都重新分配内存给临时变量
    struct Node *tmp = node->next, *next;

    // 头结点需要将next设置为NULL,与其他节点的设置不同,就可以将其拎'出来,其余节点就可以在循环中归一处理
    node->next = NULL;

    while (tmp != NULL ) {
        next = tmp->next;
        tmp->next = node;
        node = tmp;
        tmp = next;
    }

    return node;
}

#总结

编程的实质就是将人脑中的处理问题的流程化思想以程序代码表现出来并交给计算机处理并实现,有时候可能我们能够以人的思考方式去解决问题,但可能在兑现为程序代码时力有未逮。这或许间接体现出了算法与数据结构的重要性,嗯!持续学习中……