【数据结构】Java实现链表

目录

链表的概念

链表的实现

链表的功能

框架搭建

功能实现

打印链表

获取数据数量

查询数据

插入数据

头插法

尾插法

指定位置插入

删除数据

删除一个数据

 删除多个相同数据

删除链表

完整代码


链表的概念

链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。

这次要实现的是单向,不带头,非循环的链表,形式如下图所示,就像是一个火车头拉着一节节火车。

 

 单向和不循环相对来说好理解一些,关于这个不带头可能有点难理解,下面这张图是带头,两图对比着看好理解一些

链表的实现

链表的功能

 链表的功能包括插入数据、删除数据、查找数据以及销毁链表等功能,其中的部分功能还有细分。

框架搭建

首先我们可以创建一个MySingleList类,在其中定义链表的基本内容,这要运用到了静态代码块方面的知识。

MySingleList类

public class MySingleList implements IList{

    static class ListNode{
        public int val;
        public ListNode next;

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

之所以定义 head,是要把它作为链表的第一个结点,链表中每一个如下的部分都可称为一个结点。

创建一个IList接口类,再通过MySingleList类来重写接口的方法。

IList接口

public interface IList {
    //头插法
    public void addFirst(int data);
    //尾插法
    public void addLast(int data);
    //任意位置插入,第一个数据节点为0号下标
    public void addIndex(int index,int data);
    //查找是否包含关键字key是否在单链表当中
    public boolean contains(int key);
    //删除第一次出现关键字为key的节点
    public void remove(int key);
    //删除所有值为key的节点
    public void removeAllKey(int key);
    //得到单链表的长度
    public int size();
    public void clear();
    public void display();
    public void createList();
}

此时的MySingleList类

public class MySingleList implements IList{

    static class ListNode{
        public int val;
        public ListNode next;

        public ListNode(int val) {
            this.val = val;
        }
    }

    public ListNode head;


    @Override
    public void addFirst(int data) {
        
    }

    @Override
    public void addLast(int data) {

    }

    @Override
    public void addIndex(int index, int data) {

    }

    @Override
    public boolean contains(int key) {
        return false;
    }

    @Override
    public void remove(int key) {

    }

    @Override
    public void removeAllKey(int key) {

    }

    @Override
    public int size() {
        return 0;
    }

    @Override
    public void clear() {

    }

    @Override
    public void display() {

    }

    @Override
    public void createList() {

    }

}

功能实现

打印链表

display方法

在打印链表之前,需要有链表才能打印,所以我们要先创建一个链表,写一个createList方法来实现

createList方法

    public void createList(){
        ListNode node1 = new ListNode(12);
        ListNode node2 = new ListNode(23);
        ListNode node3 = new ListNode(34);
        ListNode node4 = new ListNode(45);
        ListNode node5 = new ListNode(56
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值