单链表基本操作(java)

这篇具有很好参考价值的文章主要介绍了单链表基本操作(java)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单链表基本操作(java),java,开发语言

一.自定义链表类

public class MySingleList {

     Node head; //头节点,Node类型
     int size;//链表中实际元素个数
     
     public void addFirst(int data) //头插法
     public void addLast(int data) //尾插法
     public void addIndex(int index,int data) //任意位置插入
     public boolean contains(int key) //是否包含关键字key
     public int getSize() //获取链表长度
     public void remove(int data) //删除第一次的关键字为key的节点
     public void removeAllKey(int key) //删除所有关键字为key的元素
     public void display() //遍历节点并输出
     
}

二.自定义节点类

 class Node{
        public int value;//存储链表的值
        public Node next;//存储下一个链表的地址
        public Node(int value)
        {
            this.value = value;
        }

        public Node() {
        
        }
   }

节点类是链表类的内部类文章来源地址https://www.toymoban.com/news/detail-578318.html

三.链表中的基本方法

1.头插法

 public void addFirst(int val)
    {
        Node node = new Node(val);
        node.next = head;
        head = node;
        size++;
    }

2.尾插法

 public void addLast(int data)
    {
        Node node = new Node(data);
        //如果一个节点都没有
        if(head==null){
            head = node;
            size++;
            return;
        }
        Node cur = head;
        //遍历到最后一个节点
        while(cur.next!=null)
        {
            cur = cur.next;
        }
        //插入
        cur.next = node;
        size++;
    }

3.在任意位置插入

 public void addIndex(int index,int data)
    {
        //下标不合法
        if(index<0||index>size)
        {
            throw new IllegalArgumentException("Index is invalid");
        }
        //在第一个位置插(头插)
        if(index==0)
        {
            addFirst(data);
            size++;
            return;
        }
        //在最后一个位置插
        if(index==size)
        {
            addLast(data);
            size++;
            return;
        }
        //一般情况
        Node node = new Node(data);
        Node cur = head;
        int count = 0;
        //循环找到插入位置的前一个位置
        while(count!=index-1)
        {
            cur = cur.next;
            count++;
        }
        node.next = cur.next;
        cur.next=node;
        size++;
    }

4.删除第一次的关键字为key的节点

public void remove(int key) {
        //链表中一个元素都没有
        if(head==null)
        {
            return;
        }
        //第一个元素就是要删除的元素
        if(head.value==key)
        {
            head = head.next;
            size--;
            return;
        }
        //一般情况,遍历到要删除的前一个位置
        Node cur = head;
        while(cur.next!=null)
        {
            if(cur.next.value==key)
            {
                cur.next = cur.next.next;
                size--;
                return;
            }
            //如果下一个不是要删的cur后移
            cur = cur.next;
        }
    }

5.删除所有关键字为key的元素

 public void removeAllKey(int key)
    {
        //链表中一个节点都不存在
        if(head==null)
        {
            return;
        }
        //双指针
        Node cur = head.next;
        Node prev = head;
        while(cur!=null)
        {
            if(cur.value==key)
            {
                prev.next = cur.next;
                size--;
            }else{
                prev = cur;
            }
            cur =cur.next;
        }
        //处理第一个节点
        if(head.value==key)
        {
            head = head.next;
            size--;
        }
    }

6.是否包含关键字key

    public boolean contains(int key)
    {
        Node cur = head;
        while(cur!=null)
        {
            if(cur.value==key)
            {
                return true;
            }
            cur = cur.next;
        }
        return false;
    }

7.获取链表长度

public int getSize()
{
   return  size;
}

8.遍历节点并输出

public void display()
{
    Node cur = head;
    while(cur!=null)
     {
        System.out.print(cur.value+" ");
        cur = cur.next;
     }
}

9.清空链表

public void clear()
{
  head = null;
}

到了这里,关于单链表基本操作(java)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】 循环单链表的基本操作 (C语言版)

    目录 一、循环单链表 1、循环单链表的定义: 2、循环单链表的优缺点: 二、循环单链表的基本操作算法(C语言)    1、宏定义  2、创建结构体 3、循环单链表的初始化  4、循环单链表的插入 5、求单链表长度 6、循环单链表的清空 7、循环单链表的销毁 8、循环单链表的取

    2024年01月22日
    浏览(60)
  • C语言单链表实现初始化、创建、增、删、查等基本操作(详细)

    提示:文章参考王道的课程,相当于课程笔记 目录 一、单链表的定义及初始化 1、定义   2、初始化  1)不带头结点的单链表  2)带头节的单链表  二、单链表插入和删除 1)插入 1、按位序插入(带头结点) 2、按位插入(不带头结点)  3、指定结点的后插操作  4、指定结点

    2023年04月08日
    浏览(65)
  • 【C++】单链表——单链表的基本操作

     由于顺序表的插入删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储—— 单链表 。单链表通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它不要求在逻辑上相邻的两个元素在物理位置上也相邻。 单

    2024年02月03日
    浏览(46)
  • 单链表的基本操作

    目录 一.链表的基本概念和结构 二.链表的分类 三.单链表的基本操作  1.创建一个节点 2.打印 3.尾插 4.头插 5.尾删 6.头删 7.查找 8.指定位置插入 9.指定位置删除 10.销毁         概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表

    2024年01月22日
    浏览(48)
  • 【头歌】单链表的基本操作

    任务描述 本关任务:编写单链表的初始化、插入、遍历三个操作函数。 相关知识 链表 是线性表的链式存储结构的别称,特点是以“指针”指示后继元素,因此线性表的元素可以存储在存储器中任意一组存储单元中。 每个结点只有一个指针域的链表称为 单链表 。 因此单链

    2024年03月26日
    浏览(46)
  • 数据结构——单链表基本操作实现 (c++)

    单链表链式存储结构的特点是:用一组任意的存储单元存储线性表的数据元素(这里存储单元可以是连续的,也可以是不连续的),为了表示每个数据元素a与其直接后继数据元素之间的逻辑关系,除了存储信息本身外还要存储一个指示其直接后继的信息(地址). 这两部分信

    2024年02月03日
    浏览(68)
  • Linux C语言开发(十)vim基本操作

    目录 一.什么是vim 二.vim的进入与退出 三.vim的基本模式 四.vim的命令行模式操作

    2024年01月23日
    浏览(49)
  • 【数据结构】——单链表的基本操作(带头结点)

            单链表解决了顺序表需要大量连续存储单元的缺点,但单链表附加指针域, 存储密度较顺序表低(考点!!) 。由于单链表的元素离散地分布在存储空间中,所以单链表是 非随机存取 的存储结构,即不能直接找到表中某个特定的结点。当查找某个特定结点时,需要

    2024年02月05日
    浏览(52)
  • 【数据结构】单链表基本操作:查找、插入、删除、创建

     链表由结点组成,结点由数据域和指针域组成。其中,数据域存放的就是数据元素,指针域存放下一个结点的地址。数据元素可以只有一个,也可以有多个不同类型的数据元素,甚至是数组。下图和代码来自《C Primer Plus》,该链表每个节结点同时含char类型和int类型。 ​​

    2024年02月02日
    浏览(64)
  • 数据结构——单链表上基本操作的实现

    1.按位序插入(带头结点) : ==ListInsert(L, i, e): ==在表L 中的第 i 个位置上插入指定元素 e = 找到第 i-1 个结点 ( 前驱结点 ) ,将新结点 插入其后;其中头结点可以看作第 0 个结点,故 i=1 时也适用。 typedef struct LNode{ ElemType data; struct LNode *next; }LNode, *LinkList; // 在第 i 个位置插入

    2024年01月21日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包