LinkedList与链表

目录

1、链表

2、实现自己的链表 (不带头结点)

2.1、遍历链表

2.2、求链表长度

2.3、判断链表是否包含关键字

2.4、插入节点

2.5、任意位置插入一个节点

2.6、删除一个节点

2.7、删除所有值为key的节点

2.8、清空所有节点


1、链表

链表是一种物理结构上不连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的;类似火车车厢,链表是由一个一个的节点组成的

实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:

  1. 单向或者双向
  1. 带头或者不带头
  1. 循环或者非循环

2、实现自己的链表 (不带头结点)

创建一个 IList 接口,其中方法如下:

再创建一个 MySingleList 类,实现 IList 接口并重写其中的所有方法:

在 MySingleList 类中创建一个内部类 ListNode,表示节点,节点中包含数据域和next域;这里使用静态内部类,因为静态内部类对象不需要通过外部类对象的引用获得

2.1、遍历链表

display方法:

  1. 怎么从一个节点走到下一个节点的 ?

head = head.next;

  1. 怎么判断所有的节点都遍历完了 ?

head = null;

但是这样写会导致 head 变为 null ,所以让 cur 代替 head,避免 head 变为 null

从指定位置打印

2.2、求链表长度

size方法:

遍历每一个节点

2.3、判断链表是否包含关键字

contains方法:

2.4、插入节点

头插法:addFirst方法

  1. 实例化一个节点

  2. 改变插入节点的next

  3. 改变head

也可以直接这样写

^

尾插法:指的是讲待插入的节点存放在链表的最后一个位置

addLast方法:

  1. 实例化一个节点

  2. 找到最后一个节点cur

  3. cur.next = node;

分析:

  • 头插法的时间复杂度O(1)
  • 尾插法的时间复杂度O(N)

根据上述代码看出,链表的插入只需要改变指向就可以了!
结论:

  1. 如果想让 cur 停在最后一个节点的位置 -> cur.next!= null

  2. 如果想把整个链表的每个节点都遍历完 -> cur!= null

2.5、任意位置插入一个节点

addIndex方法:

  1. 让cur走index-1步

  2. node.next = cur.next;

cur.next = node;

在插入一个节点的时候,一定要先绑定后面的节点

2.6、删除一个节点

2.7、删除所有值为key的节点

2.8、清空所有节点

相关推荐
roman_日积跬步-终至千里几秒前
【Java并发】用 JMM 与 Happens-Before 解决多线程可见性与有序性问题
java·开发语言·spring
空空kkk几秒前
SSM项目练习——hami音乐(三)
java·数据库
爬山算法9 分钟前
Hibernate(78)如何在GraphQL服务中使用Hibernate?
java·hibernate·graphql
独断万古他化14 分钟前
【Spring 核心:AOP】基础到深入:思想、实现方式、切点表达式与自定义注解全梳理
java·spring·spring aop·aop·切面编程
编程彩机26 分钟前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
bbq粉刷匠27 分钟前
Java-排序2
java·数据结构·排序算法
编程彩机29 分钟前
互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析
java·微服务·面试·分布式事务·spring webflux
Jm_洋洋35 分钟前
【C++进阶】虚函数、虚表与虚指针:多态底层机制剖析
java·开发语言·c++
小马爱打代码37 分钟前
MyBatis:缓存体系设计与避坑大全
java·缓存·mybatis
时艰.43 分钟前
Java 并发编程:Callable、Future 与 CompletableFuture
java·网络