当前位置: 首页 > news >正文

链表学习基础

链表

通过指针串联在一起的线性结构,每个节点由数据域指针域两部分组成。链表节点在内存中的存储通常不是连续的,各节点通过指针连接在一起,其内存分布大致如下图所示。

链表3

定义

单链表

struct ListNode {// DATATYPE 可以是任意存放数据的类型,如int, string等DATATYPE val; ListNode *next;ListNode(DATATYPE v) : val(v), next(nullptr) {}
};

链表1

双链表

双链表节点定义比单链表节点多一个指向前驱节点的指针域。

struct ListNode {DATATYPE val;ListNode *prev;ListNode *next;ListNode(DATATYPE v) : val(v), prev(nullptr), next(nullptr) {}
};

链表2

删除

在单链表中,删除一个节点,需要将该节点的前驱元素的 next 指针指向,该节点的后继元素。如果删除节点为头节点,则仅需找到正确的头节点即可。

链表-删除节点

插入

在单链表中,插入与删除相反,但仍需要找到插入的位置。将插入节点的 next 指针指向插入位置的后继节点,将插入位置的前驱节点指向插入节点。如果是头节点,则仅需要将插入节点指向原来头节点,将头节点标记为当前插入节点。

链表-添加节点

总结

链表在插入和删除上的时间复杂度为 O(1),在查询上的时间复杂度为 O(n)。

适用于数据量不固定,频繁增删,少量查询的场景。

解题技巧

  • 额外的数据结构(哈希表);
  • 快慢指针;
  • 虚拟头节点;

面试&笔试

在面试和笔试中,对算法的要求应有所区分。

在笔试中,题量多时间少,我们要尽量采取写出容易想到并且时间复杂度符合要求的算法,通常可以以空间换时间。

而在面试中的题,通常难度更小,为了给面试官留下深刻的影响,应尽量写出低时间复杂度,低空间复杂度,能体现代码水平的代码。

Reference

通常难度更小,为了给面试官留下深刻的影响,应尽量写出低时间复杂度,低空间复杂度,能体现代码水平的代码。

Reference

  1. 代码随想录 (programmercarl.com)
http://www.lryc.cn/news/12325.html

相关文章:

  • springboot整合阿里云oss文件服务器
  • 数据分析:旅游景点销售门票和消费情况分析
  • Android问题解决方案(一):Android 打空包后提示没有”android:exported“的属性设置
  • Portraiture2023最新版人像图像后期处理软件
  • 链表OJ(七)删除有序链表中重复的元素-I -II
  • C语言经典编程题100例(81~100)
  • ChIP-seq 分析:数据质控实操(5)
  • java黑马头条 day5自媒体文章审核 敏感词过滤算法DFA 集成RabbitMQ实现自动审核
  • python--matplotlib(1)
  • 华为OD机试题 - 获取最大软件版本号(JavaScript)
  • 字符函数和字符串函数
  • 【猜名次】-C语言-题解
  • 对 equals() 和 hashCode() 的理解?
  • IDEA插件安装慢、超时、不成功问题如何解决?
  • 软考高级之信息系统案例分析七重奏-《5》
  • JUC并发编程 Ⅳ -- 共享模型之无锁
  • Spring之AOP实现
  • Spring之基于xml的自动装配、基于Autowired注解的自动装配
  • 【案例】--(非分布式)轻量级任务调度平台
  • key的作用原理与列表的遍历、追加、搜索、排序
  • SQL性能优化的47个小技巧,你了解多少?
  • DPDK — 数据加速方案的核心思想
  • [python入门㊽] - 自定义异常 raise 关键字
  • DDOS攻击
  • 网络编程套接字
  • 海量数据相似数据查询方法
  • Codeforces Round #822 (Div. 2)
  • 华为OD机试 - 最短木板长度(JS)
  • java设计模式——观察者模式
  • linux高级命令之线程的注意点