翻转单向链表

Posted ZeroOnet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转单向链表相关的知识,希望对你有一定的参考价值。

#引子

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

#总结

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

以上是关于翻转单向链表的主要内容,如果未能解决你的问题,请参考以下文章

单向链表的构建以及翻转算法_图文详解

Java 单向链表翻转

Java 单向链表翻转

单向链表翻转

剑指 Offer 06. 从尾到头打印链表难度:简单(链表翻转)

python中的单向循环链表实现