`

单向单链表的java实现

阅读更多

单向表

package datamemory.link;

//单链表
public class ObjectLink
{
    private int size;// 链表长度
    
    private ObjectNode head;// 头节点
    
    public void add(Object obj)
    {
        ObjectNode node = new ObjectNode(obj, null);
        if (head == null)
        {
            head = node;
        }
        else
        {
            ObjectNode temp = head;
            while (temp.getNext() != null)
            {
                temp = temp.getNext(); // 移动到最后的节点
                
            }
            temp.addNodeAfter(obj);
            size++;// 表的长度+1;
        }
    }
    
    public int getSize()
    {
        return size;
    }
    
    public Object get(int i)
    {
        if (i > size - 1)
        {
            return null;
        }
        ObjectNode temp = head;
        for (int k = 0; k < i; k++)
        {
            temp = temp.getNext();
        }
        return temp;
    }
    
    public int indexOf(Object obj)
    {
        int i = 0;
        ObjectNode node = new ObjectNode(obj, null);
        if (head == null)
            return -1;
        if (head.equals(node))
            return 0;
        ObjectNode temp = head;
        while (temp.getNext() != null)
        {
            i++;
            if (temp.getNext().equals(node))
            {
                return i;
            }
            temp = temp.getNext();
        }
        
        return -1;
    }
    
    public void remove(Object obj)
    {
        ObjectNode node = new ObjectNode(obj, null);
        if (head != null)
        {
            if (head.equals(node))
                head = head.getNext();// 设置第二节点为头节点
            else
            {
                ObjectNode temp = head;
                while (temp.getNext() != null)
                {
                    if (temp.getNext().equals(node))
                    {
                        temp.removeNodeAfter();// 删除该节点之后的节点
                        size--;
                        break;
                    }
                }
            }
        }
    }
    
}

   节点类:

package datamemory.link;

//单链节点
public class ObjectNode
{
    
    private Object data;
    
    private ObjectNode next;
    
    public ObjectNode(Object data, ObjectNode next)
    {
        super();
        this.data = data;
        this.next = next;
    }
    
    protected Object getData()
    {
        return data;
    }
    
    protected void setData(Object data)
    {
        this.data = data;
    }
    
    // 在改节点之后添加新节点
    public void addNodeAfter(Object obj)
    {
        ObjectNode node = this.next;
        if (node == null)// 当改节点是尾节点时,把新加的节点设置为尾节点
        {
            this.next = new ObjectNode(obj, null);
        }
        else
        // 把该节点设置为下一节点,原先的节点为新节点的下一节点
        {
            this.next = new ObjectNode(obj, node);
        }
    }
    
    public void removeNodeAfter()
    {
        if (next != null)
        {
            next = next.next;// 设置下一节点为下下个节点
        }
    }
    
    protected ObjectNode getNext()
    {
        return next;
    }
    
    protected void setNext(ObjectNode next)
    {
        this.next = next;
    }
    
    public boolean equals(Object obj)
    {
        if (obj instanceof ObjectNode)
        {
            ObjectNode node = (ObjectNode)obj;
            if (node.getData() == this.data)// 指向的对象是同一个对象
            {
                return true;
            }
        }
        return false;
    }
}

 

如果需要给这个把这个链表类修改成泛型实现,可以在类ObjectLink,ObjectNode修改为ObjectLink<E>,ObjectNode<E>,然后把传入的对象设置为E类型即可。

分享到:
评论

相关推荐

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    java实现的单向链表和双向链表

    本篇将深入探讨由Java实现的单向链表和双向链表。 首先,我们来理解单向链表。单向链表中的每个节点包含两部分:数据域(存储实际数据)和指针域(存储指向下一个节点的引用)。这种结构使得链表只能向前遍历,不能...

    数组、单链表和双链表介绍以及双向链表的CC++Java实现 数组和链表.pdf

    数组、单链表和双链表介绍以及双向链表的C、C++和Java实现 在计算机科学中,数组、单链表和双链表是最基本的数据结构。它们都是线性表的实现方式,具有相同类型的n(n≥0)个数据元素组成的有限序列。 数组 数组是...

    Java算法(链表操作实例)

    在编程领域,算法是解决问题的关键,而链表作为一种基础数据结构,在实现各种复杂算法时扮演着重要角色。本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要...

    Java实现单向链表的基本功能详解

    主要给大家介绍了关于Java实现单向链表基本功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    逆序输出单向链表-Java 版本

    附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...

    去除链表重复元素-Java 实现

    在Java中,去除单链表中的重复元素可以通过使用哈希集合(HashSet)来实现,该集合用于存储已经遍历过的元素。在遍历链表的过程中,我们将每个元素与集合中的元素进行比较,如果发现重复,则删除链表中的该元素。 ...

    线性表实现源码-java

    2. 单链表实现:在Java中,可以创建一个LinkedList类来实现单向链表。LinkedList实现了List接口,每个节点包含一个元素以及指向下一个节点的引用。插入和删除操作相对快速,因为只需要改变相邻节点的引用,而无需...

    数据结构——单链表的具体操作

    1. 实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表 操作的具体的函数定义。 2. 程序中的单链表(带头结点)结点为结构类型,结点值为整型。 3. 本程序完成单链表的生成,任意位置的插入、删除,...

    单链表(Linked-List)

    单链表的实现通常使用C++或Java等面向对象的语言。在C++中,可以定义一个`Node`结构体,包含数据和指向下一个节点的指针: ```cpp struct Node { int data; Node* next; }; ``` 接下来,可以创建一个链表类,...

    单向链表的逆序-Java版本

    附件是.java 文件,实现了单链表的逆序算法,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了链表的逆序。reverseList方法...

    leetcode三角形打印-DataStructuresInJava:用Java实现各种数据结构和算法

    用Java实现数据结构和算法 动态数组实现 帕斯卡三角形的实现(锯齿状数组) 打印所有素数直到给定 n。 定理:假设所有数字都是素数,直到被证明为假。 单链表 标准单向链表:push/pop front、insert(i)、remove(i)、...

    java数据结构与算法.pdf

    Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...

    基础数据结构和算法(C、C++、Java各一套)

    单链表、双链表和循环链表是链表的常见形式,它们分别支持单向、双向和环形的元素遍历。 3. **队列**:队列是一种先进先出(FIFO)的数据结构,常用的操作包括入队(在队尾添加元素)和出队(从队首移除元素)。C、...

    快慢指针法判断单链表有环

    在Java中,判断单链表是否有环的经典方法是使用Floyd的“龟兔赛跑”算法,也称为快慢指针法。这种方法利用两个指针,一个每次走一步(称为慢指针),另一个每次走两步(称为快指针)。如果链表中存在环,那么快指针...

    Java单链表源码分析-ds-algos:ds-算法

    Java单链表源码分析ds-算法 在 - 获取有关数据结构和算法的完整免费课程。 订阅频道以获取所有免费课程 - :folded_hands: 感谢您一直以来的厚爱和支持。 我虚心地请求您帮助这个频道发展更多,为此请点赞、分享和...

    Java单链表源码分析-interviews:采访

    Java单链表源码分析采访 您的软件工程技术面试个人指南。 维护者 - 翻译 目录 文章 在线评委 实时编码练习 数据结构 链表 链表是数据元素的线性集合,称为节点,每个元素通过指针指向下一个节点。 它是由一组节点...

Global site tag (gtag.js) - Google Analytics