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

数据结构:链表

链表的概念及结构

链表是一种 物理存储结构上非连续 存储结构,数据元素的 逻辑顺序 是通过链表中的 引用链接 次序实现的 。
实际中链表的结构非常多样,以下情况组合起来就有 8 种链表结构:
2. 带头或者不带头
下面让我们来看一下链表的实现吧!

代码:

MySingleList部分:

public class MySingleList {//一个节点代表一个对象,所以用内部内实现static class ListNode{public int val;//节点的值域public ListNode next;//下一个节点的地址public ListNode(int val) {this.val = val;}}public ListNode head;//整个链表的头节点,所以定义在整个链表里面public void creatList(){ListNode node1=new ListNode(13);ListNode node2=new ListNode(34);ListNode node3=new ListNode(45);ListNode node4=new ListNode(47);ListNode node5=new ListNode(56);ListNode node6=new ListNode(67);node1.next=node2;node2.next=node3;node3.next=node4;node4.next=node5;node5.next=node6;this.head=node1;}public void display() {ListNode cur=head;while (cur!=null){//cur==null证明把链表走完了System.out.print(cur.val+" ");cur=cur.next;}}//头插法public void addFirst(int data){ListNode node=new ListNode(data);node.next=head;head=node;}//尾插法public void addLast(int data){ListNode node=new ListNode(data);//找尾ListNode cur=head;if(cur==null){head=node;return;}while (cur.next!=null){cur=cur.next;}cur.next=node;}//任意位置插入,第一个数据节点为0号下标public void addIndex(int index,int data){//判断位置是否合法if(index<0||index>size()){System.out.println("位置不合法");return;}if(index==0){addFirst(data);return;}if (index==size()){addLast(data);return;}ListNode cur=findIndexSubOne(index);ListNode node=new ListNode(data);node.next=cur.next;cur.next=node;}//找要插入节点位置的前一个节点private ListNode findIndexSubOne(int index){ListNode cur=head;while (index-1!=0){cur=cur.next;index--;}return cur;}//查找是否包含关键字key是否在单链表当中public boolean contains(int key){ListNode cur=head;while (cur!=null){if(cur.val==key){return true;}cur=cur.next;}return false;}//删除第一次出现关键字为key的节点public void remove(int key){if(head==null){return;}//单独删除头结点if(head.val==key){head=head.next;return;}ListNode cur=searchPrev(key);if (cur==null){System.out.println("没有你要删除的节点");return;}ListNode del=cur.next;cur.next=del.next;}private ListNode searchPrev(int key){ListNode cur=head;while (cur.next!=null){if(cur.next.val==key){return cur;}cur=cur.next;}return null;}//删除所有值为key的节点public void removeAllKey(int key){if(head==null){return;}ListNode prev=head;ListNode cur=head.next;while(cur!=null){if(cur.val==key){prev.next=cur.next;cur=cur.next;}else {prev=cur;cur=cur.next;}}if(head.val==key){head=head.next;}}//得到单链表的长度public int size(){int count=0;ListNode cur=head;while (cur!=null){count++;cur=cur.next;}return count;}public void clear() {this.head=null;}
}

Test部分

public class Test {public static void main(String[] args) {MySingleList mySingleList=new MySingleList();//mySingleList.creatList();mySingleList.addFirst(12);mySingleList.addFirst(23);mySingleList.addFirst(34);mySingleList.addFirst(23);mySingleList.addFirst(56);System.out.println();System.out.println(mySingleList.size());System.out.println(mySingleList.contains(13));mySingleList.addLast(7);mySingleList.addIndex(3,99);mySingleList.remove(12);mySingleList.removeAllKey(23);mySingleList.clear();mySingleList.display();}
}

对应的结果:


http://www.mrgr.cn/news/61792.html

相关文章:

  • java hashmap的几种遍历方法
  • 认知战认知作战:三藩之乱中的认知作战分析与策略
  • mac系统升级node版本
  • NVR小程序接入平台/设备EasyNVR多个NVR同时管理视频监控新选择
  • rnn/lstm
  • 从零搭建开源陪诊系统:关键技术栈与架构设计
  • 特征选择算法
  • openEuler 24.03安装saltstack-3006.9后使用salt-ssh命令报错
  • Vue3使用AntV | X6绘制流程图:开箱即用
  • Nginx 反向代理流程,以及缓冲区详解
  • 才正式发布两个月GitHub高达星标29.7K!如果你想入门LLM大模型,那这就是最好的教程!
  • LoRA微调,真的有毒!
  • 一篇文章让你彻底掌握 Python【可保存下载】
  • 沈阳乐晟睿浩科技有限公司抖音小店运营创新
  • Hierarchical Supervised Contrastive Learning for Multimodal Sentiment Analysis
  • 没有对象来和我手撕红黑树吧
  • keepalived+脚本抢占模式和非抢占模式
  • ComfyUI 轻松实现二次元线稿上色,快速生成精美动漫图像(附工作流)
  • 直播美颜SDK平台开发指南:美颜API的应用与性能提升方案详解
  • 图解Redis 07 | HyperLogLog数据类型的原理及应用场景
  • 供需指标(Supply and Demand ),供给与需求,寻找支撑压力位神器 MT4免费公式!
  • DICOM标准:深入详解DICOM数据模型,理解DICOM数据模型
  • SAP系统与快递100系统集成案例
  • Helm全链路精通:从入门到实战,Kubernetes应用管理新高度
  • 机器学习中回归任务、分类任务常用的算法
  • CSP/信奥赛C++刷题训练:经典前缀和例题(4):洛谷P3662:Why Did the Cow Cross the Road II S