链表是一种物理存储单元上非连续、非顺序的存储结构;数据之间的逻辑顺序是靠链表中的指针来实现的。而链表本身由结点组成、结点可以在运动时动态生成;
结点:由数据域和指针域组成。
链表分为单向链表和双向链表
单向链表:每个结点由存储数据元素的数据域和指向下一结点的指针域组成。
例:单链表的结点结构
/**
* @param 单链表结点类
*/
//节点类的数据对象
private Object obj;
//对下一节点的引用
private LinkNode next;
//在创建节点对象时就传入节点中的数据对象
public LinkNode(Object obj){
this.obj=obj;
}
public Object getObj(){
return obj;
}
public void setObj(Object obj){
this.obj=obj;
}
public LinkNode getNext(){
return next;
}
public void setNext(LinkNode next){
this.next=next;
}
而双向链表是单向链表的改进、因为在单向链表中,我们只能从前往后使用,不能从后往前使用;所以双向链表中、我们在结点中可以增加一个指向前结点的指针;这样,我们就可以随便地使用链表中的数据了。
结点表示:
private Object obj;
//对下一节点的引用
private DoubleLinkNode child;
//对上一节点的插入
private DoubleLinkNode parent;
//在创建节点对象时就传入节点中的数据对象
public DoubleLinkNode(Object obj){
this.obj=obj;
}
public Object getObj(){
return obj;
}
public void setObj(Object obj){
this.obj=obj;
}
public DoubleLinkNode getChild(){
return child;
}
public void setChild(DoubleLinkNode child){
this.child=child;
}
public DoubleLinkNode getParent(){
return parent;
}
public void setParent(DoubleLinkNode parent){
this.parent=parent;
}
链表的使用:
链表最基本的使用就是实现查找、插入、删除、合并、排序、统计、或简单的计算。
其链表的插入:
/**
* 在指定地点插入节点
*
* @param Index
* @param obj
*/
public void insertIndexObj(int index, Object obj) {
// 判断插入的位置是否正确
if (this.getLength() < index || index < 0) {
// 抛出异常
throw new java.lang.RuntimeException("下标越界" + index + "链表大小:"
+ this.getLength());
} else {
// 创建一个新的节点
DoubleLinkNode newNode = new DoubleLinkNode(obj);
// 调用方法,得到当前索引位置的结点
DoubleLinkNode node = this.getLinkNode(index);
// 插入操作前进行判断是否为空链表
if (index == 0) {
// 将头节点指向新节点
front = newNode;
} else {
// 插入时,先得到其索引值位置的父节点
DoubleLinkNode fNode = node.getParent();
// 将新节点的上节点指针指向fNode
newNode.setParent(fNode);
// 将fNode节点的子节点指向新节点
fNode.setChild(newNode);
}
// 将新节点的子节点指向当前索引值位置的节点
newNode.setChild(node);
// 将索引位置的节点的父节点指向新节点
node.setParent(newNode);
}
}
如得到链表的长度:
/**
* 得到链表的长度
*
* @return
*/
public int getLength() {
int count = 0;
if (null == front) {
return count;
}
DoubleLinkNode node = front.getChild();
// 遍历链表
while (null != node) {
count++;
node = node.getChild();
}
return count + 1;
}
分享到:
相关推荐
单链表适用于简单、线性的数据访问,而双向链表则在需要双向遍历或频繁逆置的情况下更有优势。理解这些数据结构的原理和实现,对于编写高效、灵活的代码至关重要。在实际应用中,开发者应根据具体需求选择合适的数据...
在Java编程语言中,链表是一种非常重要的数据结构,它不同于数组,不依赖于内存的连续空间。链表由一系列节点组成,每个节点包含数据和指向下一个节点的引用。在这个主题中,我们将深入探讨Java中的链表,以及如何...
链表在解决许多算法问题中都非常有用,例如二分查找、快速排序、哈希表等。通过熟练掌握链表操作,可以提升Java程序员的算法能力,并在面试和实际项目中游刃有余。在实际开发中,Java的`java.util.LinkedList`类提供...
- 在Java中,我们可以创建一个简单的单链表类,包含Node(节点)类和LinkedList(链表)类。 - Node类:包含数据域(data)和指针域(next)。 - LinkedList类:包含头节点(head),用于添加、删除和查找节点的...
在“java链表反转及排序”这个主题中,我们将探讨如何在Java中实现单向链表的反转和排序。首先,我们创建一个链表节点类,包含数据和指向下一个节点的引用: ```java public class ListNode { int val; // 节点值 ...
在实际应用中,链表因其动态性(不需预先确定大小)和高效插入/删除(相对于数组)特性,常用于数据结构如栈、队列、哈希表等。 这些源代码实验可以帮助我们深入理解链表的工作原理以及如何在Java中实现它们。通过...
总结来说,使用Java链表实现多项式相加是一种直观且有效的方法。通过链表的特性,我们可以方便地管理多项式的各项,并进行相应的计算。这个过程不仅锻炼了数据结构和算法的应用能力,也提高了代码的可读性和可维护性...
在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...
数据域存储实际的数据,而指针域则指向链表中的下一个节点。在Java中,我们可以使用对象和引用的概念来实现单链表。 首先,我们需要创建一个表示链表节点的类Node,它通常有两个属性:data(用于存储数据)和next...
本项目“java入门程序(模拟图书馆管理)”是针对初学者设计的一个简单的学习资源,它通过使用链表这种数据结构来实现对图书馆书籍的管理功能,帮助初学者理解Java编程以及链表的基本概念。 链表是一种线性数据结构...
在Java中,我们可以通过定义一个简单的链表节点类(`Node`)来表示链表中的每个节点,并通过一系列的方法来实现倒序功能。 #### 定义节点类 首先,我们需要定义一个`Node`类,该类包含两个属性:`data`用于存储...
在Java中,我们可以创建一个名为`Node`的类来表示链表的节点,其中包含一个`data`字段存储数据和一个`next`字段指向下一个节点。例如: ```java public class Node { int data; Node next; public Node(int ...
在Java中,我们可以创建一个Node类来表示节点,并在主链表类中维护头节点。以下是一个简单的单链表实现: ```java public class SingleLinkedList { private Node head; private class Node { int data; Node ...
本文将深入探讨如何利用链表来实现一个简单的定时器功能,并结合`java`、`链表`、`定时器`、`数据结构`以及`j2me`的相关知识进行详细讲解。 首先,我们需要理解链表的基本概念。链表不同于数组,它不是连续存储元素...
此外,链表在解决某些特定问题时非常有用,如哈希表(使用链表解决冲突)、图形算法(邻接表表示图的节点连接)等。了解并熟练掌握链表的原理和操作,对于提升Java编程能力和解决复杂问题的能力至关重要。 总结来说...
3. `LinkedListClass.java` - 这个文件很可能是对标准Java的`java.util.LinkedList`类的一个简单实现或者示例,`LinkedList`是Java集合框架的一部分,实现了`List`、`Deque`和`Cloneable`接口。它使用双向链表来存储...
本示例中的“链表逆序输出”是一个典型的Java编程问题,旨在帮助初学者理解链表的操作以及如何通过代码实现逆序输出。下面我们将深入探讨这个主题。 链表与数组不同,它不连续存储数据,而是通过节点之间的引用关系...
在Java编程中,"java贪吃蛇(链表)"是一个经典的编程练习,它结合了数据结构中的链表知识和游戏开发的基本概念。这个项目利用链表来实现贪吃蛇的身体部分,使得代码更加简洁高效。 贪吃蛇游戏的主体是蛇的身体,每...
在Java中,我们可以创建一个简单的单链表类来表示链表结构。这个类通常包括一个头节点(head)以及各种操作链表的方法,如添加节点(add)、删除节点(remove)、查找节点(search)等。以下是一个简单的单链表节点...
以下是一个简单的动态链表实现: ```java public class DynamicLinkedList { Node head; public DynamicLinkedList() { this.head = null; } // 插入节点到链表尾部 public void add(int value) { if ...