链表基础知识

单链表基础知识整理 单链表知识整理 基础:顺序存储结构与链式存储结构 删除链表结点 链表反转 快慢指针法解决链表相关问题 顺序存储结构与链式存储结构 (首先需要理解线性表的概念) 顺序存储结构 链式存储结构 用一段连续的存储单元存放线性表的数据元素,即逻辑上相邻的,空间上也相邻。 用一组任意的存储单元存放线性表的数据元素,即逻辑上相邻的,空间上不一定相邻。 需要预分配存储空间 不需要预分配存储空间 ... 阅读详情

1.创建链表

Java创建链表

public class ListNode {
    public int val;
    public ListNode next;
    
    ListNode(int x){
        val = x;
        next = null; //更加规范
    }
}

ListNode listNode = new ListNode(1);

python创建链表

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
    listNode = ListNode(1)

2.链表的增删改查

2.1 遍历链表

Java遍历链表
public static int getListLength(ListNode head){
    int length = 0;
    ListNode cur = head;
    while (cur != null){
        length ++;
        cur = cur.next;
    }
    return length;
}
Python遍历链表
def length(self):
    cur = self._head
    count = 0
    while cur != None:
        count += 1
        cur =cur.next
    return count

2.2 链表插入

考虑三种情况:

  1. 在链表头部插入
  2. 在链表中间插入
  3. 在链表尾部插入

特殊考虑情况:1.输入节点为空、2.插入位置越界

Java实现链表插入
    public static Node insertNode(Node head, Node nodeInsert, int position) {
        // 需要判空,否则后面可能会有空指针异常
        if (head == null) {
            return nodeInsert;
        }
        //越界判断
        int size = getLength(head);
        if (position > size + 1 || position < 1) {
            System.out.println("位置参数越界");
            return head;
        }

        //在链表开头插入
        if (position == 1) {
            nodeInsert.next = head;
//            return nodeInsert;
            //上面return还可以这么写:
            head = nodeInsert;
            return head;
        }

        Node pNode = head;
        int count = 1;
        // 找到插入位置前一个节点
        while (count < position - 1) {
            pNode = pNode.next;
            count++;
        }
        nodeInsert.next = pNode.next;
        pNode.next = nodeInsert;

        return head;
    }

python实现链表插入
    #此方法调用了其它方法,只作为思路参考,勿直接复用
    def insert(self, pos, item):
        """指定位置添加元素"""
        # 若指定位置pos为第一个元素之前,则执行头部插入
        if pos <= 0:
            self.add(item)
        # 若指定位置超过链表尾部,则执行尾部插入
        elif pos > (self.length() - 1):
            self.append(item)
        # 找到指定位置
        else:
            node = Node(item)
            count = 0
            # pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置
            pre = self._head
            while count < (pos - 1):
                count += 1
                pre = pre.next
            # 先将新节点node的next指向插入位置的节点
            node.next = pre.next
            # 将插入位置的前一个节点的next指向新节点
            pre.next = node

2.3 链表删除

考虑三种情况:

  1. 在链表头部删除
  2. 在链表中间删除
  3. 在链表尾部删除

Java实现链表删除
    public static Node deleteNode(Node head, int position) {
        if (head == null) {
            return null;
        }
        int size = getLength(head);
        //思考一下,这里为什么是size,而不是size+1-->因为此处是删除元素
        if (position > size || position <1) {
            System.out.println("输入的参数有误");
            return head;
        }
        if (position == 1) {
            //curNode就是链表的新head
            return head.next;
        } else {
            Node cur = head;
            int count = 1;
            // 找到删除位置的前一个元素
            while (count < position - 1) {
                cur = cur.next;
                count++;
            }
            Node curNode = cur.next;
            cur.next = curNode.next;
        }
        return head;
    }

Python实现链表删除
    def remove(self, item):
        """删除节点"""
        cur = self._head
        pre = None
        while cur != None:
            # 找到了指定元素
            if cur.item == item:
                # 如果第一个就是删除的节点
                if not pre:
                    # 将头指针指向头节点的后一个节点
                    self._head = cur.next
                else:
                    # 将删除位置前一个节点的next指向删除位置的后一个节点
                    pre.next = cur.next
                break
            else:
                # 继续按链表后移节点
                pre = cur
                cur = cur.next

Proteus仿真——电压比较器 电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。 阅读详情

相关推荐

SAP LSMW保姆级操作文档

SAP LSMW(Legacy System Migration Workbench)是一个强大的工具,旨在简化旧系统数据向SAP系统的迁移过程。它允许用户通过多种方式导入数据,包括直接输入、批处理输入和BAPI。LSMW支持数据映射和转换,确保数据在迁移过程中保持一致性,减少手动输入的需求,从而提高效率,适用于新系统实施和数据更新项目。在日常运维过程中我们经常会遇到用户要求我们批量改一写数据,通常这些字段的信息有些SAP是提供程序可以批量进行更改的比如主数据的MM17、通用更改数据的MASS。

我小时候很黑的博客 4942

链表基础知识详解

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 ## 2.链表的组成 --- 链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时

Python老吕的博客 2133

【Flink cdc】Data row is smaller than a column index, internal schema representation is probably xxx

翻译一下:当scan.startup.mode=EARLIEST_OFFSET时,如果在最早的offset之后表结构有过变化就无法支持。原因应该是在binlog 的earliest_offset之后,表结构被修改过。我的解决方案:source配置中使用。mysql source配置使用。,以时间戳为消费依据。

integrity 2085

链表基础知识总结

什么是链表 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点都包括两部分:一是数据域,用来存储元素数值数据,另一个是存储直接后继结点地址的指针域,该指针一般称为next,用来指向下一个结点的位置。由于下一个结点也是链表类型,所以next的指针也要定义为链表类型。 链表中的一些基本定义和特点 头指针:是指向链表中第一个结点的指针 首元结点:是指链表中存储的第一个数据元素的结

闲适_ 1万+

基于多智能体协作的量化交易研究框架TradingAgents详解

量化交易系统通过算法模型分析市场数据,旨在实现自动化投资决策。其核心原理在于利用计算机强大的数据处理能力,结合统计学和机器学习方法,从历史数据中挖掘可重复的盈利模式。这一技术的价值在于能够克服人类情绪干扰,实现纪律性交易,并快速处理海量信息。在应用场景上,量化策略广泛应用于股票、期货、外汇等多个金融市场。本文聚焦的TradingAgents框架,创新性地引入了**多智能体协作**和**对抗性验证**机制,通过模拟真实投研团队的分工与辩论流程,构建了一个研究友好、决策过程可解释的量化交易研究平台,为探索大语言

weixin_36019375的博客 431

游戏战斗系统架构设计的演绎之路——从一坨意大利面条到一座精密钟表

摘要:游戏战斗系统架构设计的演进之路 本文系统梳理了游戏战斗系统从早期街机到现代3A大作的架构发展历程。70-80年代的街机游戏采用基础碰撞盒判定(如《街头霸王》);90年代实现动画融合与状态机架构(《最终幻想》《拳皇》);2000年后MMO引入服务器验证与同步技术(《魔兽世界》);3D时代融合物理引擎与智能AI(《GTA5》《只狼》);移动端则发展出轻量化架构与云端判定(《王者荣耀》)。现代战斗系统已实现模块化、数据驱动和热更新,未来趋势是AI裁判与云战斗系统。这一演进过程展现了技术与创意的完美结合,数百

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 801

链表的基础知识

一、概述 一种线性表数据结构。它使用一组任意的存储单元(可以是连续的,也可以是不连续的),来存储一组具有相同类型的数据。 1、分类 单向链表 包含指针的链表节点、内存地址 双向链表 包含前驱节点和后继节点的链表节点、内存地址 循环链表 将单链表中的终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,使得链表的头尾相接,这种链表称之为单循环链表 二、程序实现 1、构造链表 class ListNode: def __init__(self, val):

qq_41260988的博客 587

【Mode】FDE 求解器工作流程

Lumerical---FDE(Finite Difference Eigenmode) Solver

u011699626的博客 4941

链表python基础知识

跟着datawhale刷力扣,以下基本来自于其文档,感谢 链表基本类型 链表(Linked List):一种线性表数据结构。它使用一组任意的存储单元(可以是连续的,也可以是不连续的),来存储一组具有相同类型的数据。即「链表」 是实现线性表的链式存储结构的基础。 单链表每个数据元素占用若干存储单元的组合称为一个「链节点」,还要存放一个指出这个数据元素在逻辑关系上的直接后继元素所在链节点的地址,该地址被称为「后继指针 next」。 双向链表(Doubly Linked List):链表的一种,也叫做双链表。它的

qq_44941689的博客 1万+

C#上位机+YOLO实战:从环境搭建到实现首个目标检测(零基础入门)

/ YOLOv8的类别名称(共80类,对应COCO数据集)// ONNX推理会话// YOLOv8的输入宽度// YOLOv8的输入高度本文从技术选型、环境搭建到代码实现,详细介绍了如何将C#上位机与YOLOv8结合,实现基础的目标检测功能。整个过程避开了常见的坑点,同时对核心原理和代码逻辑进行了详细解析,希望能帮助零基础的开发者快速入门。实际上,C#上位机+YOLO的组合在工业领域有非常广泛的应用,本文的案例只是一个起点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 791

30、模态组合规则在振动分析中的应用

本文详细介绍了模态组合规则在振动分析中的应用,重点讨论了绝对峰值叠加法(SRSS)和完全二次组合(CQC)的理论基础、应用场景及优缺点。通过具体工程实例,展示了模态组合规则在地震载荷下结构响应分析中的实际效果,并提供了应用步骤和注意事项,为结构设计和安全评估提供了科学依据。

nice1的博客 222

关于链表的基础知识

讲述了单链表的增删改查

2401_82376751的博客 927

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2786

链表基础知识与题目整理(Python)

1.链表简介 1.1 链表定义 链表(Linked List): 一种线性表数据结构。它使用一组任意的存储单元(可以是连续的,也可以是不连续的),来存储一组具有相同类型的数据。 比如单链表: 如上图所示,链表通过将一组任意的存储单元串联在一起。 链表节点: 每个数据元素占用若干存储单元的组合称为一个链接点。 链表节点的存储内容: 数据元素的值+后继指针(后继指针是指出这个数据元素在逻辑关系上的直接后继元素所在链节点的地址)。 数据之间的逻辑关系:逻辑关系是通过后继指针来简介反映的。逻辑上相邻的数据数素在物

A496608119的博客 1645

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【leetcode 力扣刷题】链表基础知识 基础操作

删除节点时,将被删除节点的前面节点和后面节点连接起来的同时,断开被删除节点和其前面一个、后面一个节点的连接,并且要释放掉被删除节点的空间:pre->next = cur->next;delete cur。在链表中的一个位置插入节点,需要先断开插入位置前后两个节点的链接,再和这两个节点建立新的链接:先cur->next = pre->next;构成的,数据域是一个节点的数据,指针域存储下一个节点的地址,下一个节点依靠上一个节点的指针域寻址。将尾节点看作是下一个节点是null的节点,处理和其他节点一样。

massive_jiang的博客 882

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

链表基础知识+移除链表元素+设计链表+反转链表

接下来说一说链表的定义。链表节点的定义,很多同学在面试的时候都写不好。这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定义的。而在面试的时候,一旦要自己手写链表,就写的错漏百出。这段代码定义了一个名为 `ListNode` 的类,它通常用于在Python中创建和操作链表。链表是一种线性数据结构,其中每个元素(通常称为节点)包含一个值和一个指向下一个节点的引用。

weixin_43710382的博客 1826

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

简单谈C语言链表之基础知识

简单谈C语言链表之基础知识 这篇文章只是我在学习链表中我认为的一些难点的理解,并不是系统的讲解链表。 1.理解链表中的struct struct student p1 约等于 int p1。 struct student{ int data; //数据域 struct node *next; //指针域 }; 上面的代码就相当于我们声明了一种类...

god_father9的博客 5523

基础知识学习---链表基础

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习;暂时只有2023年3月份,第一次社招找工作的过程;2、个人经历: 研究生期间课题是SLAM在无人机上的应用,有接触SLAM、Linux、ROS、C/C++、DJI OSDK等;3、参加工作后(2021-2023年)岗位是嵌入式软件开发,主要是服务器开发,Linux、C/C++、网络编程、docker容器、CMake、makefile、Shell脚本、JSON等。

AnChenliang_1002的博客 807
上一篇: itext7字体颜色设置方法
下一篇: 1.两个链表第一个公共子节点问题
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值