单向表
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实现的单向链表和双向链表。 首先,我们来理解单向链表。单向链表中的每个节点包含两部分:数据域(存储实际数据)和指针域(存储指向下一个节点的引用)。这种结构使得链表只能向前遍历,不能...
数组、单链表和双链表介绍以及双向链表的C、C++和Java实现 在计算机科学中,数组、单链表和双链表是最基本的数据结构。它们都是线性表的实现方式,具有相同类型的n(n≥0)个数据元素组成的有限序列。 数组 数组是...
在编程领域,算法是解决问题的关键,而链表作为一种基础数据结构,在实现各种复杂算法时扮演着重要角色。本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要...
主要给大家介绍了关于Java实现单向链表基本功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,...
在Java中,去除单链表中的重复元素可以通过使用哈希集合(HashSet)来实现,该集合用于存储已经遍历过的元素。在遍历链表的过程中,我们将每个元素与集合中的元素进行比较,如果发现重复,则删除链表中的该元素。 ...
2. 单链表实现:在Java中,可以创建一个LinkedList类来实现单向链表。LinkedList实现了List接口,每个节点包含一个元素以及指向下一个节点的引用。插入和删除操作相对快速,因为只需要改变相邻节点的引用,而无需...
1. 实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表 操作的具体的函数定义。 2. 程序中的单链表(带头结点)结点为结构类型,结点值为整型。 3. 本程序完成单链表的生成,任意位置的插入、删除,...
单链表的实现通常使用C++或Java等面向对象的语言。在C++中,可以定义一个`Node`结构体,包含数据和指向下一个节点的指针: ```cpp struct Node { int data; Node* next; }; ``` 接下来,可以创建一个链表类,...
附件是.java 文件,实现了单链表的逆序算法,文件绿色安全,仅供学习交流使用,欢迎大家下载学习交流! 首先定义了一个ListNode类来表示链表中的节点,然后在reverseList方法中实现了链表的逆序。reverseList方法...
用Java实现数据结构和算法 动态数组实现 帕斯卡三角形的实现(锯齿状数组) 打印所有素数直到给定 n。 定理:假设所有数字都是素数,直到被证明为假。 单链表 标准单向链表:push/pop front、insert(i)、remove(i)、...
Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点进行详细解释。 1. **数据结构**: - **稀疏数组**:当大量数据中大部分为零或...
单链表、双链表和循环链表是链表的常见形式,它们分别支持单向、双向和环形的元素遍历。 3. **队列**:队列是一种先进先出(FIFO)的数据结构,常用的操作包括入队(在队尾添加元素)和出队(从队首移除元素)。C、...
在Java中,判断单链表是否有环的经典方法是使用Floyd的“龟兔赛跑”算法,也称为快慢指针法。这种方法利用两个指针,一个每次走一步(称为慢指针),另一个每次走两步(称为快指针)。如果链表中存在环,那么快指针...
Java单链表源码分析ds-算法 在 - 获取有关数据结构和算法的完整免费课程。 订阅频道以获取所有免费课程 - :folded_hands: 感谢您一直以来的厚爱和支持。 我虚心地请求您帮助这个频道发展更多,为此请点赞、分享和...
Java单链表源码分析采访 您的软件工程技术面试个人指南。 维护者 - 翻译 目录 文章 在线评委 实时编码练习 数据结构 链表 链表是数据元素的线性集合,称为节点,每个元素通过指针指向下一个节点。 它是由一组节点...