【数据结构算法(二)】链表总结

简介: 【数据结构算法(二)】链表总结

🌈键盘敲烂,年薪30万🌈



普通单向链表

结点结构:只有val 和 next指针

初始时:head = null;


 

双向链表

指针:prev指针 val next指针

初始时:head = null;


 

带哨兵的链表

初始时:new 一个新节点sentinel val不重要,next = null


 

环形链表

尾节点的next指向头结点

初始时:头结点的next指向自己


 

⭐双向带头带环链表的实现⭐

准备工作

public class TheBestLinkedList implements Iterable<Integer>{
 
    private Node sentinel = new Node(null, 666, null);
 
    public TheBestLinkedList() {
        sentinel.prev = sentinel;
        sentinel.next = sentinel;
    }
    private static class Node{
        Node prev;
        int val;
        Node next;
 
        public Node(Node prev, int val, Node next) {
            this.prev = prev;
            this.val = val;
            this.next = next;
        }
    }
    @Override
    public Iterator<Integer> iterator() {
        return null;
    }
}

addFirst

    public void addFirst(int val){
        Node newNode = new Node(sentinel, val, null);
 
        Node first = sentinel.next;
        newNode.next = first;
        first.prev = newNode;
        sentinel.next = newNode;
    }

addLast

    public void addLast(int val){
        Node newNode = new Node(null, val, sentinel);
        Node last = sentinel.prev;
 
        last.next = newNode;
        newNode.prev = last;
        sentinel.prev = newNode;
 
    }

removedLast

    public Node removedLast(){
        if(isEmpty()){
            return null;
        }
        Node last = sentinel.prev;
        Node removedPrev = last.prev;
 
        sentinel.prev = removedPrev;
        removedPrev.next = sentinel;
        return last;
    }

removedFirst

    public Node removedFirst(){
        if(isEmpty()){
            return null;
        }
        Node first = sentinel.next;
        // 只有一个节点 removedNext = sentinel
        Node removedNext = first.next;
 
        sentinel.next = removedNext;
        removedNext.prev = sentinel;
        return first;
 
    }

isEmpty

    public boolean isEmpty(){
        return sentinel.prev == sentinel;
    }

迭代器遍历

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            Node p = sentinel.next;
            @Override
            public boolean hasNext() {
                return p != sentinel;
            }
 
            @Override
            public Integer next() {
                int ans =  p.val;
                p = p.next;
                return ans;
            }
        };
    }

 

⭐链表基础OJ⭐

1.反转链表

2.根据值删除链表

3.删除倒数第n个结点

4.有序链表去重

5.合并两个有序链表

6.合并多个有序链表

7.找链表中间结点

8.回文链表

9.链表环问题

相关文章
|
4月前
|
存储 监控 安全
企业上网监控系统中红黑树数据结构的 Python 算法实现与应用研究
企业上网监控系统需高效处理海量数据,传统数据结构存在性能瓶颈。红黑树通过自平衡机制,确保查找、插入、删除操作的时间复杂度稳定在 O(log n),适用于网络记录存储、设备信息维护及安全事件排序等场景。本文分析红黑树的理论基础、应用场景及 Python 实现,并探讨其在企业监控系统中的实践价值,提升系统性能与稳定性。
105 1
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
116 0
|
8月前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
232 10
 算法系列之数据结构-二叉树
|
8月前
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
187 3
 算法系列之数据结构-Huffman树
|
8月前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
265 22
|
7月前
|
存储 算法 物联网
解析局域网内控制电脑机制:基于 Go 语言链表算法的隐秘通信技术探究
数字化办公与物联网蓬勃发展的时代背景下,局域网内计算机控制已成为提升工作效率、达成设备协同管理的重要途径。无论是企业远程办公时的设备统一调度,还是智能家居系统中多设备间的联动控制,高效的数据传输与管理机制均构成实现局域网内计算机控制功能的核心要素。本文将深入探究 Go 语言中的链表数据结构,剖析其在局域网内计算机控制过程中,如何达成数据的有序存储与高效传输,并通过完整的 Go 语言代码示例展示其应用流程。
133 0
|
9月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
244 30
|
9月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
396 25
|
9月前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
360 23
|
10月前
|
机器学习/深度学习 存储 C++
【C++数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】
本内容介绍了单链表的基本运算任务,涵盖线性表的基本概念、初始化、销毁、判定是否为空表、求长度、输出、求元素值、按元素值查找、插入和删除数据元素等操作。通过C++代码示例详细解释了顺序表和链表的实现方法,并提供了测试说明、通 - **任务描述**:实现单链表的基本运算。 - **相关知识**:包括线性表的概念、初始化、销毁、判断空表、求长度、输出、求元素值、查找、插入和删除等操作。 - **测试说明**:平台会对你编写的代码进行测试,提供测试输入和预期输出。 - **通关代码**:给出了完整的C++代码实现。 - **测试结果**:展示了测试通过后的预期输出结果。 开始你的任务吧,祝你成功!
393 5

热门文章

最新文章