Java 实现单链表的基本操作

顺序表:物理上逻辑上都连续;
链表:物理上不一定连续,逻辑上一定连续的。

链表的概念及结构

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

8种链表结构:
单项、双向
带头、不带头
循环、非循环

主要的三种链表:
无头单项非循环链表、带头循环单链表、不带头双向循环链表
在这里插入图片描述

代码实现
1. 接口定义
package com.github.linked.Impl;

public interface ILinked {
   
    // 头插法
    void addFirst(int data);

    // 尾插法
    void addLast(int data);

    // 任意位置插入,第一数据节点为0号下标
    boolean addIndex(int index, int data);

    // 查找是否包含关键字 key 在单链表中
    boolean contains(int key);

    // 删除第一次出现的关键字为 key 的节点
    int remove(int key);

    // 删除所有值为 key 的节点
    void removeAllKey(int key);

    // 得到单链表的长度
    int getLength();

    // 打印单链表
    void display();

    // 清空单链表以防内存泄漏
    void clear();
}

2. 代码实现接口
package com.github.linked.Impl;

public class SingleListed implements ILinked {
   

    // 节点类
    class Node {
   
        private int data;
        private Node next;

        public Node(int data) {
   
            this.data = data;
            this.next = next;
        }
    }

    private Node head; //头节点
    public SingleListed() {
   
        this.head = head;
    }

    /**
     * 头插法
     * @param data 要插入的数据
     */
    @Override
    public void addFirst(int data) {
   
        // 1. 拿到一个实体
        Node node = new Node(data);

        // 2. 插入
        // 如果是第一次插入,直接到头节点
        if (this.head == null) {
   
            this.head = node;
        } else {
    //不是第一次插入
            node.next = this.head; // 插入的节点指向头节点
            this.head = node;      // 更新头节点
        }
    }

    /**
     * 尾插法
     * @param data 要插入的数据
     */
    @Override
    public void addLast(int data) {
   
        // 1. 拿到一个实体
        Node node = new Node(data);
        Node cur = this.head;

        // 2. 插入
        // 如果是第一次插入,直接到头节点
        if (this.head == n
  • 38
    点赞
  • 140
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值