翻转单向链表

#引子

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

#总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值