【数据结构】链表

链表的种类有很多,这里只挑选其中的部分种类来实现

目录

1.链表概念

2.链表分类

3.链表的实现

3.1增加数据

3.1.1头部添加数据

3.1.2尾部添加数据

 3.1.3任意位置加入数据

 3.2删除数据

3.2.1删除第一次出现key值的位置的节点

 3.2.2删除所有位置出现key值的节点

4.LinkedList

5.顺序表和链表的区别


1.链表概念

链表同样是线性表的一种,其特点是物理存储结构不连续,逻辑顺序是通过链表中的引用链接次序来实现(具体可以想象下火车车厢是如何连接的)

具体结构如下图:

节点分为两个部分,一部分用来存放数据,另一部分存放下一节点的地址,第一个节点称为头结点

2.链表分类

链表的种类有很多,主要有3个特点

  • 单向/双向

上图所示就是单向,双向的话节点就需要分成3部分,多出来的部分用来存放上一个节点的地址

  • 循环/不循环

不循环就是最后一个节点指向null,循环则是指向头结点

  • 带头/不带头

带头就是头结点不存放数据,只存放下一个节点的地址,不带头就是头结点也存放数据

带头的链表头节点是不变的

上述的特点进行排列组合的话就有8种链表结构,但是我们的重点只有两种

  • 无头单向非循环链表:此链表结构最简单,在实际使用的时候多用于其它数据结构的子结构,并且在oj题中出现的最多的也是这种链表
  • 无头双向非循环链表:Java官方提供的链表就是此链表

 本文实现的就是不带头单向不循环链表

3.链表的实现

首先链表是由节点组成,所以在链表类中定义一个节点的内部类

public class LinkList {
    static class ListNode {
        public int data;
        public ListNode next;

        public ListNode(int i) {
            this.data = i;
        }
    }
}

由于链表的结构,链表的增删改查等操作都需要头节点,所以在类里面再定义一个头节点,而且我想在实例化的时候可以直接在后面写数据,所以再加一个构造方法

public class LinkList {
   
    static class ListNode {
        public int data;
        public ListNode next;

        public ListNode(int i) {
            this.data = i;
        }
    }

    public ListNode head; 

    public LinkList(int val) {
        ListNode listNode = new ListNode(val);
        this.head = listNode;
    }
}

接下来就是链表的操作,这里只讲增和删,这两个掌握,查和改也就不需要过多讲了

3.1增加数据

3.1.1头部添加数据

既然是头部添加数据,那么这个添加进来的节点就是新的头节点

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星鸦wyk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值