链表算法

作者: 小鱼嘻嘻 | 来源:发表于2018-11-25 21:05 被阅读10次

写在前面

好久没有写文章了,冬天来了人变得慵懒了;还有就是觉得自己写了那么的文章,一直没有什么人看,总觉得有些郁郁不得志的感觉,。可是最近看到偶尔还是有人点赞我的文章,尽然还有一个不知名的哥们给我打赏(受宠若惊),我觉得写下去还是有意义的,就像很多时候我们并不知道方向在哪里?也不知道我们做的到底是对还是错,坚持往下走走看,也许就柳暗花明又一村了。

链表翻转算法

说来不怕你笑,我也写了好多年程序了,如果没有IDE,让我在白板上写出可以正确运行的链表翻转算法我是真的写不出来的。虽然说起来很简单,把指针调换一下就OK了,实现起来并不是那么简单。说真的这还真是一个考验基本功的算法。
先来看一下我写的代码。

        LinkedNode cur = head;
        LinkedNode pre = null;
        while (cur != null) {
            LinkedNode tmp = pre;
            pre = cur;
            pre.next = tmp;
            cur = cur.next;
        }

虽然代码看起来也就三四行,但是很多时候我是特别容易搞错,因为在链表里面基本都是指针来回的指来指去,所以一定要注意移动节点的时候会造成的影响。

我来解释一下这个代码:

  • 创建cur节点的目的是不让head节点移动,这样你就可以知道原来链表的头在哪。
  • 创建pre节点是为了从后一个节点指向前一个节点。在我们循环cur节点的时候,什么时候把后一个节点指向前一个节点呢?
    我们要明白一点,我们的pre在一次循环的时候是被移动了(简单来说第一次就是从pre从null-->1),而我们的目的是1-->null,简单来说我们操作的都是pre,这怎么能实现呢?在编程的世界里很多时候我们都会借用临时变量,因此我们需要先把为改变的pre保存起来(tmp = pre),然后就可以从新的pre指向临时变量来完成操作。

相关文章

  • 数据结构 - 单向链表及相关算法

    单向链表 链表常见算法 链表反转

  • 19 删除链表的倒数第 N 个结点

    题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 自行解答: 算法思路: 其实算法是链表...

  • 头条-手撕代码

    [toc] 图算法 以及最短路径算法 树算法 手写LRU 排序算法 链表算法

  • 单链表

    单链表一些相关的算法集锦,单链表的算法可以提高逻辑能力。 反转链表 最基本的链表的题目,很简单的迭代操作,需要注意...

  • 大厂面试系列(七):数据结构与算法等

    数据结构和算法 链表 链表,常见的面试题有写一个链表中删除一个节点的算法、单链表倒转、两个链表找相交的部分,这个一...

  • Java实现每日一道算法面试题(20):leecode23 合并

    1.算法题目 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 2.算法思路 算法思...

  • 总结

    Android篇 数据结构与算法顺序表 - ArrayList源码链表 - 单向链表、双向链表 - LinkedL...

  • 2018-06-07

    算法笔记 1 大O算法 1:O(运算次数):表示运算最糟糕情况下 运算时间,表示算法时间的增速 2数组链表 在链表...

  • 链表类算法题汇总

    算法题目中常考察的链表操作无非以下几种: 链表反转 链表合并 寻找链表中点 寻找链表倒数第 K 个节点 删除链表节...

  • 如何设计一个内存缓存库

    双向链表 + LRU淘汰算法 + 线程安全 双向链表的设计 用OC来设计双向链表(不是循环链表) 单个节点 整个链...

网友评论

    本文标题:链表算法

    本文链接:https://www.haomeiwen.com/subject/stkmqqtx.html