IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法学习之链表篇 -> 正文阅读

[数据结构与算法]算法学习之链表篇


前言

链表是一种数据结构,和数组同级,如Java中使用的ArrayList,其实现原理是数组,而LinkedList是链表,链表在循环遍历时效率不高,但在插入删除时优势却很明显,学习好链表也是夯实基础的重要,在算法题中链表也有着举足轻重的地位。本系列文章会就一些经典的算法题入手,剖析各数据结构以及题解的思想~


一、链表数据结构剖析

链表是通过指针串联在一起的线性结构,每一个节点由两部分组成,数据域和指针域,顾名思义,数据域是存放节点信息数据的区域(好比是房子),指针域就是指针指向下一节点的区域(好比是房子前的路牌),而链接的入口点称为列表的头结点也就是head。

画的很丑请见谅

链表类型

上面阐述的仅仅是一种最为简单普遍的单链表类型,链表还有以下常见的类型:
1.双链表
双链表是指既指向下一节点又能指向上一节点的一种链表结构
图来源于代码随想录笔记
2.循环链表
在普通单链表中,尾结点始终指向空,而头结点是没有结点指向它,循环链表就是将头尾结点像其他节点一般串联起来的一种链表结构:
循环单链表

链表存储方式

数组在内存中是连续分布的
链表中各节点是散列分布的

链表的定义(Java)

关于链表的定义,可以去看风吹草东动的博客:自定义单链表

一定要能手写单链表定义!!!

应用篇(Day1)

移除链表元素(Leetcode:203)

题目:
题目
思路:
如何移除一个节点呢?
其实很简单,只需要从链表头节点开始,知道下一节点为null,将其中不满足要求的节点的上一节点指向这个节点的下一个节点,那么就等于断了这个节点的“通路”,而Java得GC回收机制会自动回收节点资源,所以不必手动回收,下面我们看看示例代码:

示例代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //头结点若为空,那么就无需判断了
        if(head==null)
            return null;
        //删除的节点可能是头结点,故需要在头结点前先确定一个首节点
        ListNode dummy=new ListNode(-1,head);

        ListNode prev=dummy;
        ListNode curr=head;
        while(curr!=null){
            if(curr.val==val){
                //需要删除
                prev.next=curr.next;        //删除节点的上一节点指向删除节点的下一节点
            }else{
                prev=curr;                  //将当前节点置为上一个节点,然后移动下一个节点
            }
            curr=curr.next;
        }
        return dummy.next;
    }
}

总结

这篇博客让我们对链表有了简单清晰的理解,并对知识加以简单应用,我们下期再对其进行更为细致的研究吧,加油~
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:43:11  更:2021-08-21 15:43:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 7:59:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计