数据结构之链表

一、单向链表

1.定义

  1. 链表中的每一个元素称之为结点(Node)。

  2. 物理存储单元上,非连续、非顺序的存储结构。

  3. 单向链表:每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。记录下个结点地址的指针叫作后继指针 next。 链表中的某个节点为B,B的下一个节点为C 表示: B.next==C

JAVA代码的表示:

java 复制代码
    private static class Node<E> {
        E item;
        Node<E> next;

        Node(E element, Node<E> next) {
            this.item = element;
            this.next = next;
        }
    }

2.时间复杂度分析

(1)查询操作

  1. 只有在查询头节点的时候不需要遍历 链表,时间复杂度是O(1)

  2. 查询其他结点需要遍历 链表,时间复杂度是O(n)

(2)插入、删除操作

  1. 只有在添加和删除头节点的时候不需要遍历 链表,时间复杂度是O(1)

  2. 添加或删除其他结点需要遍历 链表找到对应节点后,才能完成新增或删除节点,时间复杂度是O(n)

二、双向链表

1.定义

双向链表,顾名思义,它支持两个方向。

  1. 每个结点不止有一个后继指针 next 指向后面的结点。

  2. 有一个前驱指针 prev 指向前面的结点。

JAVA代码的表示:

java 复制代码
    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

2.时间复杂度分析

(1)查询操作

  1. 查询头尾结点的时间复杂度是O(1)。

  2. 平均的查询时间复杂度是O(n)。

  3. 给定节点找前驱节点的时间复杂度为O(1)。

(2)插入、删除操作

  1. 头尾结点增删的时间复杂度为O(1)。

  2. 其他部分结点增删的时间复杂度是 O(n)。

  3. 给定节点增删的时间复杂度为O(1)。

三、总结

1.单向链表和双向链表的区别是什么?

1.1 单向链表只有一个方向,结点只有一个后继指针 next。

1.2 双向链表它支持两个方向,每个结点不止有一个后继指针next指向后面的结点,还有一个前驱指针prev指向前面的结点。

2.链表操作数据的时间复杂度是多少?

相关推荐
kyriewen几秒前
你还在给每个图片父元素加类名?CSS :has() 让选择器“逆天改命”
前端·css·面试
golang学习记2 分钟前
IDEA 2026.1:这些 核心功能免费开放!
java·ide·intellij-idea
我就是你毛毛哥5 分钟前
Docker 安装 Jenkins JDK8 版
java·docker·jenkins
爱敲代码的菜菜5 分钟前
【Redis】Redis基本操作
java·数据库·redis·缓存·hash·zset
编码忘我7 分钟前
java之线程池
java·后端·面试
handsomethefirst8 分钟前
【算法与数据结构】【面试经典150题】【题46-题50】
数据结构·算法·面试
程序员水自流8 分钟前
【AI大模型第13集】Transformer底层架构原理详细介绍(核心组件拆解分析)
java·人工智能·架构·llm·transformer
岁岁种桃花儿11 分钟前
kubenetes从入门到上天系列第二十六篇:Kubernetes的Istio服务网格实战
java·kubernetes·istio
JavaEdge.13 分钟前
openclaw 本地部署实战:含网关启动 + 本地模型接入完整步骤
java·openclaw
loserwang14 分钟前
Fluss#1386: 从日志恢复中的 OutOfOrder 来看 LEO、HW 与 Checkpoint 的区别
java·后端