学习数据结构一:链表

Posted Kapok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习数据结构一:链表相关的知识,希望对你有一定的参考价值。

链表

链表是N个数据元素的有限序列,最常用的是链式表达,也叫线性链表或链表
链表中存储的数据元素也叫节点,一个节点存储的就是一条记录
每个结点的结构包括数据域、指针域两部分

链表拓展

  • 单向链表 只能通过上一结点的指针找到下一个结点
  • 循环链表 让单向链表最后一个元素的指针指向第一个元素
  • 双向链 除了有指向下一个结点的指针外,再增加一个指向上一个结点的指针
  • 双向循环链表 同时具备循环链表和双向链表融合的特征

使用场景

一:操作系统内的动态内存分配
二:LRU缓存淘汰算法

常用操作

// 1.链表插入
s.next = p.next
p.next = s

// 2.链表删除
p.next = p.next.next

// 3.链表反转
while(curr){
    next = curr.next
    curr.next = prev
    prev = curr
    curr = next
}
// 4  快慢指针
// 4.1 奇数个元素链表,快慢指针查询中间结点
while(fast && fast.next && fast.next.next){
    fast = fast.next.next;
    slow = slow.next;
}
// 4.2 快慢指还可以用来判断链表是否有环,如果链表存在环,快指针和慢指针一定会在环内相遇,即 fast == slow 的情况一定会发生

// 5. 虚拟头:链表头可能发生改变时可使用

leetcode

  • 141 环形链表
  • 142 环形链表Ⅱ
  • 202 快乐数
  • 206 链表反转
  • 91 链表反转Ⅱ
  • 25 K 个一组翻转链表
  • 61 旋转链表
  • 24 两两交换链表中的节点
  • 83 删除排序链表中的重复节点
  • 82 删除排序链表种的重复元素Ⅱ
  • 86 分隔链表
  • 138 复制带随机指针的链表

以上是关于学习数据结构一:链表的主要内容,如果未能解决你的问题,请参考以下文章

C语言教程双向链表学习总结和C语言代码实现!值得学习~

奇妙的数据结构世界用图像和代码对链表的使用进行透彻学习 | C++

JavaScript笔试题(js高级代码片段)

学习数据结构一:链表

IOS开发-OC学习-常用功能代码片段整理

经典算法学习——链表实现冒泡排序