前言:
单链表是数据结构中最基础、最核心的线性表之一,也是考研、笔试、面试必考内容。本文将从零带你深入理解单链表,包含结构定义、创建、头插、尾插、任意位置插删、遍历、面试算法题等全套内容,代码可直接运行。
一、什么是单链表?
单链表是一种物理存储单元上非连续、非顺序的线性存储结构。数据元素的逻辑顺序通过链表中的指针链接实现。
每个节点由两部分组成:
数据域:存储当前节点的数据
指针域:指向后继节点的地址
与数组相比:
数组支持随机访问,但插入删除效率低
单链表不支持随机访问,但插入删除效率高
单链表可动态分配内存,空间更加灵活
二、单链表与双向链表的关系
单链表是最基础的链表结构,只有一个后继指针 next 。
双向链表是单链表的扩展,增加了前驱指针 prev 。
单链表只能从前向后遍历。
双向链表支持双向遍历,操作更方便,但占用空间更大。
简单理解:双向链表 = 单链表 + 反向查找能力。
三、单链表结构定义(C语言)
四、基础工具函数
创建新节点
遍历链表
获取链表长度
五、单链表插入操作头部插入
尾部插入
任意位置插入
六、单链表删除操作头部删除
尾部删除
任意位置删除
七、LeetCode 面试高频算法题LeetCode 206. 反转链表
LeetCode 141. 环形链表
LeetCode 876. 链表的中间结点
LeetCode 19. 删除链表的倒数第 N 个结点
LeetCode 21. 合并两个有序链表
八、面试常问问题数组和单链表的区别?
头插法和尾插法的区别与应用场景?
单链表的优缺点是什么?
如何找到链表倒数第 K 个节点(LeetCode 19 思想)?
反转链表的迭代与递归思路?
快慢指针能解决哪些链表问题?
九、总结
单链表是非连续存储结构,依靠指针串联节点。
插入、删除效率高,访问效率低。
头插、尾插、任意位置插删是必须掌握的核心操作。
LeetCode 206、141、876、19、21 是面试最高频链表题。
单链表是学习栈、队列、哈希表、二叉树等结构的重要基础。
十、结束语
如果这篇文章对你有帮助,欢迎 点赞、收藏、转发 给一起学习的小伙伴!
本文代码完整可直接运行,适合期末作业、考研复习、面试准备。
感谢阅读,祝你学习进步!