链表是一种物理存储单元上非连续、非顺序的存储结构;数据之间的逻辑顺序是靠链表中的指针来实现的。而链表本身由结点组成、结点可以在运动时动态生成;
结点:由数据域和指针域组成。
链表分为单向链表和双向链表
单向链表:每个结点由存储数据元素的数据域和指向下一结点的指针域组成。
例:单链表的结点结构
/**
* @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数组+链表简单实现HashMap的put和get 数组和链表.pdf
java 实现的链表简单的丢手绢游戏,可以研究一下链表的机制,还算一般复杂
java实现的动态链表!很简单的东西,没有完全的链表功能
初学java ,这是模仿的java数据结构中用链表实现图书馆管理的小程序,很简单,可供初学者参考使用
这是一个简单的java程序,用于实现对输入字符的逆序输出。初学者可以参考。
主要介绍了 Java 链表的定义与简单实例的相关资料,需要的朋友可以参考下
这是我们学校的一个课程设计题,我是用链表实现的,并且测试类也写得较简单。如果有什么不对的地方,请多指教。
JAVA写一个单链表 1、已知带头结点的动态单链表 L 中的结点是按整数值递增排序的,试写一 算法将值为 x 的结点插入到表 L 中,使 L 仍然有序。要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。 2、设计一算法,...
Java用数组和链表的方式简单实现HashMap的增删改功能 数组和链表.pdf
实现了一个简单的java版本的单链表,链表反转和链表是否相交如果相交求相交节点。关于链表是否相交是一次阿里的面试的在线试题,挂的很彻底。然后就在网上找了几个实现思路自己用java做了一个简单的实现....
简单的来讲一下什么是链表:首先链表是一种线性的数据结构(其他数据结构还有,树、图),是在每一个节点里存到下一个节点(next)的指针(Pointer)。 链表最大的好处则是采用了见缝插针的方式,链表中的每一个节点...
本代码为链表的Java实现,使用了简单的实现了内部类,接口,难度系数不高,交互上有改进
这个循环链表是基于引用的,现实的算法比较简单,但是可以作为参考之用。
# 单链表 Java 中单向链表的简单实现。
示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 accumulationByFor.java 用for语句写的累加程序 accumulationByWhile.java 用while语句写的累加程序 ...
arithmetic java算法冒泡排序、二叉树、数组、链表、队列学习简单示例 private static void mpSoft(String [] data) { for (int i = 0; i ; i++) { System.out.println(Arrays.toString(data)); for (int j = 0; ...
使用链表实现简单的学生信息录入系统,实例开发,链表运用
最新的链表方法,专注java而制作,简单,易懂。main方法是重点。希望对大家有所帮助。