news 2026/11/2 6:32:44

链表的特点以及实现步骤

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
链表的特点以及实现步骤

一、链表是什么

链表不是一整块内存,它把每一份数据包装成节点Node。
每个节点做两件事:存真正的数据 data ;存下一个节点的地址 next ,指向下一个小伙伴
1.链表的优点

  1. 新增尾部数据很快。我们代码里加了尾节点 last ,直接让last.next指向新节点就行,不用循环找尾巴,速度很快。
  2. 不需要提前定容量。数组要一开始就写有多大,链表想存多少就存多少,节点随时new出来。
  3. 删除、插入的时候,不需要像数组一样把大量元素往后/往前挪。只需要改几个next的指向。

2.链表的缺点
4. 不能随机访问!想拿第index位置的数据,必须从头head一个一个往后遍历,不能直接一下拿到。所以 get(index) 方法要写for循环。
5. 查询慢,找数据只能从头挨个找。
6. 需要额外的内存存next引用。

//链表的三个变量publicNodehead;publicNodelast;publicintsize=0;

节点类Node

classNode{publicintdata;//数据本身publicNodenext;//保存下一个节点的变量//构造方法publicNode(intdata){this.data=data;}publicNode(){}

二、链表的实现步骤

我们要实现的功能分别是:尾插add、指定位置插入insert、按下标删除remove、按数值删除第一个removes、删除全部相同数据removeAll。

1.实现尾部添加 add(int data)

//添加publicvoidadd(intdata){//创建节点保存数据Nodenode=newNode(data);//定义变量单独保存头节点Nodecurr=head;if(curr==null){//把node保存为头节点head=node;last=node;}else{//循环遍历到尾节点//尾节点添加数据last.next=node;last=node;}size++;}

2.指定下标插入 insert(int index,int data)

//插入:遍历到index位置的上一个节点publicvoidinsert(intindex,intdata){//判断是否越界if(index<0||index>=size){System.out.println("index 越界...");return;}Nodenode=newNode(data);Nodecurr=head;//插在表头if(index==0){node.next=head;head=node;if(last==null){last=node;}}elseif(index==size){//插在末尾last.next=node;last=node;}else{//插在中间for(inti=0;i<index-1;i++){curr=curr.next;}node.next=curr.next;curr.next=node;}size++;}

***3.按下标删除remove(int index) ***

//删除指定位置数据publicintremove(intindex){if(index<0||index>=size){System.out.println("index 越界...");return-1;}intolddata;Nodecurr=head;//删头节点if(index==0){olddata=head.data;//存储被删的数据head=head.next;//头指针后移//如果链表空了尾指针也置空if(head==null){last=null;}size--;returnolddata;}//删中间或尾节点for(inti=0;i<index-1;i++){curr=curr.next;}Nodednode=curr.next;olddata=dnode.data;curr.next=dnode.next;//直接跳过被删节点if(dnode==last){last=curr;}size--;returnolddata;}

4.按数值删除第一个removes(int data)

//删除指定数据publicbooleanremoves(intdata){Nodecurr=head;if(head==null){returnfalse;}//数据在头节点if(head.data==data){head=head.next;size--;if(head==null){last=null;}returntrue;}while(curr.next!=null){if(curr.next.data==data){Nodednode=curr.next;curr.next=dnode.next;if(dnode==last){last=curr;}size--;returntrue;}curr=curr.next;}returnfalse;}

5.删除全部相同数据removeAll(int data)

//删除所有相同数据publicbooleanremoveAll(intdata){Nodecurr=head;if(head==null){returnfalse;}//头节点while(head!=null&&head.data==data){head=head.next;size--;if(head==null){last=null;}returntrue;}//在中间while(curr.next!=null){if(curr.next.data==data){Nodednode=curr.next;curr.next=dnode.next;if(dnode==last){last=curr;}size--;}else{//没找到相同数据才往后走curr=curr.next;}}returnfalse;}

6.get获取元素、size获取长度

链表不能随机访问,get只能循环走到对应下标:

//获取publicintget(intindex){if(index<0||index>=size){System.out.println("index 越界...");return-1;}//利用循环遍历到index位置Nodecurr=head;for(inti=0;i<index;i++){curr=curr.next;}returncurr.data;}//长度publicintsize(){returnsize;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 6:32:22

揭秘Linux进程管理核心:从PCB到fork机制

目录 一、进程是什么 1.1 什么是进程 1.2 描述进程&#xff1a;PCB进程控制块 1.3 task_struct中存储什么 二、 组织进程 2.1进程管理 2.2 进程查看 三、fork创建进程 3.1 fork的作用 3.2 fork的原理 四、Linux内核中的进程状态 4.1 运行态 4.2 阻塞态 4.3 挂起态…

作者头像 李华
网站建设 2026/11/2 6:31:29

Agent 16. 如何设计多 Agent 的协作与动态切换机制?

16. 如何设计多 Agent 的协作与动态切换机制&#xff1f; &#x1f454;面试官&#xff1a;多 Agent 系统里&#xff0c;各个 Agent 之间怎么协作&#xff1f; &#x1f64b;‍♂️我&#xff1a;一个 Agent 做完之后把结果传给下一个 Agent&#xff0c;就像流水线一样&#xf…

作者头像 李华
网站建设 2026/11/2 6:29:35

mithril.js PWA 完整指南:用 8.93KB 框架搭出可安装的离线应用

mithril.js PWA 完整指南&#xff1a;用 8.93KB 框架搭出可安装的离线应用 【免费下载链接】mithril.js A JavaScript Framework for Building Brilliant Applications 项目地址: https://gitcode.com/gh_mirrors/mi/mithril.js mithril.js 是一个构建单页应用的 JavaSc…

作者头像 李华
网站建设 2026/11/2 6:29:23

AI3T 2026 | 人工智能基础设施与架构 Track 征稿通知

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 6:25:44

深入理解前端缓存策略完整指南(进阶篇)

本文深入探讨前端缓存策略完整指南&#xff08;进阶篇&#xff09;&#xff0c;涵盖背景分析、原理剖析、实战步骤、配置示例、优化建议和避坑指南。在前端性能优化领域&#xff0c;前端缓存策略完整指南&#xff08;进阶篇&#xff09;是开发者和技术负责人持续关注的核心议题…

作者头像 李华
网站建设 2026/11/2 6:22:53

若依整合vue教程

RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0…

作者头像 李华