zoukankan      html  css  js  c++  java
  • 【LeetCode解题总结】链表篇

    基础数据结构

    链表(LinkedList)

    优点

    • 链表能灵活地分配内存空间
    • 能在 O(1) 时间内删除或者添加元素,前提是该元素的前一个元素已知,当然也取决于是单链表还是双链表,在双链表中,如果已知该元素的后一个元素,同样可以在 O(1) 时间内删除或者添加该元素。

    缺点

    • 不像数组能通过下标迅速读取元素,每次都要从链表头开始一个一个读取;
    • 查询第 k 个元素需要 O(k) 时间。

    应用场景

    如果要解决的问题里面需要很多快速查询,链表可能并不适合;如果遇到的问题中,数据的元素个数不确定,而且需要经常进行数据的添加和删除,那么链表会比较合适。而如果数据元素大小确定,删除插入的操作并不多,那么数组可能更适合。

    常见解题思路

    注意事项

    • 在解决链表的题目时,可以在纸上或者白板上画出节点之间的相互关系,然后画出修改的方法,既可以帮助你分析问题,又可以在面试的时候,帮助面试官清楚地看到你的思路。
    • 可以用prev、curr、next分别代表前一个节点、当前节点和下一个节点
    • 访问节点元素的时候要确保节点非空

    具体方法

    利用快慢指针

    (有时候需要用到三个指针)

    可以画图确定快指针比慢指针快多少步

    题目 思路
    206. 反转链表
    19. 删除链表的倒数第N个节点
    876. 链表的中间结点
    141. 环形链表
    • 构建一个虚假的链表头

      一般用在要返回新的链表的题目中,在这类问题里,如果不用一个虚假的链表头,那么在创建新链表的第一个元素时,我们都得要判断一下链表的头指针是否为空,也就是要多写一条 if else 语句。比较简洁的写法是创建一个空的链表头,直接往其后面添加元素即可,最后返回这个空的链表头的下一个节点即可。

  • 相关阅读:
    Django之搭建学员管理系统
    数据库查询操作(fetchone,fetchall)
    HTTP 方法:GET与 POST
    初识django框架
    Memcached的批量删除方案总结
    centos5.5 下面 lnmp环境遇到的小问题
    CentOS 5.5 --学习(1)
    HTTP请求方法及响应码详解(http get post head)
    codeigniter注意点
    htaccess 伪静态的规则
  • 原文地址:https://www.cnblogs.com/JasonBUPT/p/11867450.html
Copyright © 2011-2022 走看看