当前位置: 首页 > backend >正文

4.LinkedList的模拟实现:

LinkedList的底层是一个不带头的双向链表。
不带头双向链表中的每一个节点有三个域:值域,上一个节点的域,下一个节点的域。

不带头双向链表的实现:

public class Mylinkdelist{//定义一个内部类(节点)static class ListNode{int val;//值域ListNode prev;//指向前一个节点ListNode next;//指向后一个节点public ListNode(int val){//构造方法this.val=val;}}ListNode head=null;//定义一个头结点ListNode last=null;//定义一个尾链表public void addIndex(int Index,int data){//从指定位置插入int len=size();if(Index<0||Index>len){return ;}ListNode node = new ListNode (data); if(Index==0){addFirst(data);return ;}if(Index==len){addLast(data);return;}ListNode cur=head;int count=0;while(count!=Index){count++;cur=cur.next;}node.next=cur;node.prev=cur.prev;cur.prev.next=node;cur.prev=node;}public void addLast(int key){//尾插ListNode node=new ListNode(key);if(last==null){head=last=noed;}else{last.next=node;node.prev=last;last=node;}}public void addFirst(int key){//头插ListNode node=new ListNode(key);if(head==null){head=last=node;}else{node.next=head;head.prev=node;head=node;}}  public void diaplay(){//把双向链表展示出来ListNode cur=head;while(cur!=null){//用cur遍历链表System.out.print(cur.val+" ");cur=cur.next;}}public int size(){//求链表的长度ListNode cur=head;int count=0;while(cur!=null){cur=cur.next;count++:}return count;}public boolean contains(int key){//查找ListNode cur=head;while(cur!=null){if(cur.val==key){return true;}cur=cur.next;}return false;}public void remove(int key){//删除节点ListNode cur=head;while(cur!=null){if(cur.val==key){if(cur==head){head=head.next;if(head==null){head.prev=null;}}else{cur.prev.next=cur.next;if(cur.next==null){last=cur;}cur.next.prev=cur.prev;}}cur=cur.next;}}public void clear(){//清除链表ListNode cur=head;while(cur!=null){ListNode curN=cur.next;cur.next=null;cur.prev=null;cur=curN;}head=last=null;}
}
http://www.xdnf.cn/news/1198.html

相关文章:

  • 实践项目开发-hbmV4V20250407-Taro项目构建优化
  • 瓦瑟斯坦差分隐私中命题7对总变差TV的应用
  • vue3 组件传参
  • 2025软件测试常用面试问题及参考答案(附文档)
  • 计算机组成与体系结构:缓存(Cache)
  • TCP和UDP
  • Windows 同步-Windows 单向链表和互锁链表
  • Typebot:开源、强大、可自托管的聊天机器人构建工具
  • DES、3DES、SM4 加密算法简介
  • 查看Spring Boot项目所有配置信息的几种方法,包括 Actuator端点、日志输出、代码级获取 等方式,附带详细步骤和示例
  • 第十五届蓝桥杯 2024 C/C++组 下一次相遇
  • Uniapp:navigator(页面跳转)
  • 【飞渡科技数字孪生虚拟环境部署与集成教程 - CloudMaster实战指南】
  • KDD Cup 2017 数据集分析
  • G1 人形机器人软件系统架构与 Python SDK
  • BeeWorks:专业的企业Im即时通讯平台
  • PyTorch深度学习框架60天进阶学习计划 - 第48天:移动端模型优化(二)
  • flutter 插件收集
  • 15openlayers获取VectorLayer上的数据
  • C++学习:六个月从基础到就业——C++学习之旅:STL容器详解
  • webpack基础使用了解(入口、出口、插件、加载器、优化、别名、打包模式、环境变量、代码分割等)
  • v-html 显示富文本内容
  • Crawl4AI:打破数据孤岛,开启大语言模型的实时智能新时代
  • 【MCP Node.js SDK 全栈进阶指南】中级篇(3):MCP高级资源设计
  • 进行性核上性麻痹饮食指南:科学膳食提升生活质量
  • 学习Docker遇到的问题
  • SpringBoot高校心理健康系统实现与开发
  • 测试-时间规模化定律可以改进世界基础模型吗?
  • Go 剥离 HTML 标签的三把「瑞士军刀」——从正则到 Bluemonday
  • 实用生活c语言脚本