- 浏览: 31528 次
文章分类
java中的链表
建立链表的关键是如何将节点联系起来。
链表是一种数据结构,首先,我们拿链表与数组比较一下。
数组:定义时长度固定(在内存中也是连续的),有下标,不能任意删除某个元素
链表:长度不固定(可以根据需要申请内存),没有下标,可以根据需要删除
C中的链表是通过指针来把相邻的节点联系起来的,也就是前一个节点通过指针来保存下一个节点的地址,所以如果能得到头结点,就能得到下一个节点,得到下一个节点,就能得到下下个节点,依次类推,就能得到链表的所有内容。
java中的链表,java中没有指针,所以它不能使用指针来保存下一个节点的地址,但是我们可以保存下一个节点对象,这种方法叫做引用。首先我们要定义好一个节点类,我的定义如下:
public class LinkNode {
private Object obj;//节点内的数据对象
private LinkNode child;//保存对下一个节点的引用
private LinkNode parent;//保存对上一个节点的引用
//重写构造方法,保证在创建对象的时候必须赋值
public LinkNode(Object obj){
this.obj=obj;
}
//获得元素,添加子节点、父节点的方法
public void setObj(Object obj){//修改里面元素的方法
this.obj=obj;
}
public Object getObj(){//获得节点元素的方法
return obj;
}
public void setChild(LinkNode child){//设置下一个节点的方法 this.child=child;
}
public LinkNode getChild(){//获得下一个节点的方法
return child;
}
public void setParent(LinkNode parent){//设置上一个节点的方法
this.parent=parent;
}
public LinkNode getParent(){//获得上一个节点的方法
return parent;
}
}
当然你可一个里面的数据类型定义为泛型,这样就能把它的使用范围扩大。
上面的类只是一个节点,而不是一个链表,也就相当鱼c中的结构体,要把它联系起来,我们不妨再定义一个链表类。我的定义如下:
public class LinkList {
//定义指向首节点和尾节点的属性
private LinkNode first=null;
private LinkNode last=null;
/**
* 往链表后面添加元素
* @param obj要添加的元素
*/
public void addNode(Object obj){
//创建一个节点
LinkNode newnode=new LinkNode(obj);
//如果还没有节点,则把当前节点作为第一个节点
if(first==null){
first=newnode;//当前节点为首节点
last=newnode;//当前节点也为尾节点
}else{
//判断下一个节点是否为尾节点
LinkNode node=first;
while(node.getChild()!=null){//下一个节点为null是循环结束
node=node.getChild();//取下一个节点
}
node.setChild(newnode);//把要插入的节点作为下一个节点
newnode.setParent(node);//把这个节点作为父节点
last=newnode;
}
}
//一般链表还应该有增加,删除,修改,查找的功能,上面我只写了它增加的方法你 们 可以根据需要写更多的方法。
}
建立链表的关键是如何将节点联系起来。
链表是一种数据结构,首先,我们拿链表与数组比较一下。
数组:定义时长度固定(在内存中也是连续的),有下标,不能任意删除某个元素
链表:长度不固定(可以根据需要申请内存),没有下标,可以根据需要删除
C中的链表是通过指针来把相邻的节点联系起来的,也就是前一个节点通过指针来保存下一个节点的地址,所以如果能得到头结点,就能得到下一个节点,得到下一个节点,就能得到下下个节点,依次类推,就能得到链表的所有内容。
java中的链表,java中没有指针,所以它不能使用指针来保存下一个节点的地址,但是我们可以保存下一个节点对象,这种方法叫做引用。首先我们要定义好一个节点类,我的定义如下:
public class LinkNode {
private Object obj;//节点内的数据对象
private LinkNode child;//保存对下一个节点的引用
private LinkNode parent;//保存对上一个节点的引用
//重写构造方法,保证在创建对象的时候必须赋值
public LinkNode(Object obj){
this.obj=obj;
}
//获得元素,添加子节点、父节点的方法
public void setObj(Object obj){//修改里面元素的方法
this.obj=obj;
}
public Object getObj(){//获得节点元素的方法
return obj;
}
public void setChild(LinkNode child){//设置下一个节点的方法 this.child=child;
}
public LinkNode getChild(){//获得下一个节点的方法
return child;
}
public void setParent(LinkNode parent){//设置上一个节点的方法
this.parent=parent;
}
public LinkNode getParent(){//获得上一个节点的方法
return parent;
}
}
当然你可一个里面的数据类型定义为泛型,这样就能把它的使用范围扩大。
上面的类只是一个节点,而不是一个链表,也就相当鱼c中的结构体,要把它联系起来,我们不妨再定义一个链表类。我的定义如下:
public class LinkList {
//定义指向首节点和尾节点的属性
private LinkNode first=null;
private LinkNode last=null;
/**
* 往链表后面添加元素
* @param obj要添加的元素
*/
public void addNode(Object obj){
//创建一个节点
LinkNode newnode=new LinkNode(obj);
//如果还没有节点,则把当前节点作为第一个节点
if(first==null){
first=newnode;//当前节点为首节点
last=newnode;//当前节点也为尾节点
}else{
//判断下一个节点是否为尾节点
LinkNode node=first;
while(node.getChild()!=null){//下一个节点为null是循环结束
node=node.getChild();//取下一个节点
}
node.setChild(newnode);//把要插入的节点作为下一个节点
newnode.setParent(node);//把这个节点作为父节点
last=newnode;
}
}
//一般链表还应该有增加,删除,修改,查找的功能,上面我只写了它增加的方法你 们 可以根据需要写更多的方法。
}
发表评论
-
搭建hadoop集群
2013-08-21 11:27 1661前言:关于hadoop集群的搭建,虽然有了很多的博客,但 ... -
优先队列2
2013-01-26 23:52 815数组形式的优先队列和链表形式的优先队列 ... -
动态加载
2013-01-26 23:26 772这里的动态指的是类的动态装载,我的理解是在程序运行时才确定要 ... -
优先队列
2013-01-21 18:07 1216... -
线程的同步
2013-01-18 01:01 867线程的同步 ... -
总结一
2012-11-04 22:31 714... -
java实现哈夫曼树
2012-09-22 23:14 3827... -
安卓手机开发
2012-08-14 16:33 1056初次接触安卓手机开发 ... -
bmp格式转化
2012-08-11 12:43 1067BMP文件格式分析 第0--1字节:必须是‘B’'M'两 ... -
关键字
2012-07-16 23:24 849... -
图像重绘
2012-07-14 11:09 1234一、为什么要重绘 1、计算机有三种存储数据的存储器--外 ... -
数据结构与排序
2012-07-11 23:28 837数据结构与排序一、数据结构 1.数据结构可以抽象的 ... -
自定义队列
2012-07-07 22:07 797队列 一.数组与一般队列的区别 1.数组在定义的时候必须得 ... -
事件机制
2012-07-02 20:41 843事件机制 一.事件源 1.哪些是事件源 所有的窗体类对象都 ... -
类的继承
2012-07-02 20:39 818... -
登录界面
2012-07-02 20:37 1107... -
创建对象
2012-07-01 23:09 743创建对象 一.为什么要创建对象 1.在java中我们只能 ... -
对象和类
2012-07-01 23:07 714类和对 ...
相关推荐
用java实现了数据结构中的链表,作为新手学习数据结构和java的资料。
JAVA实现链表_双向链表
Java 实现链表 在计算机科学中,链表是一种常用的数据结构,它允许在内存中存储和管理大量的数据。Java 语言提供了多种方式来实现链表,本文将详细介绍 Java 实现链表的方法和技巧。 链表的定义 链表是一种非线性...
标题“试析用Java实现链表数据结构.pdf”所揭示的知识点涵盖了Java编程语言在内存管理和链表数据结构实现方面的深入探讨。描述中提到的“#资源达人分享计划#”可能意味着这篇文章是作为知识分享的一部分,而标签...
### JAVA实现链表知识点详解 #### 一、链表基础概念 链表是一种常见的基础数据结构,用于存储元素集合。在Java中,链表的实现可以是非线性的,具有动态数组的特性,也就是说,链表的大小不需要在创建时指定,可以...
用java实现链表增删改查
使用Java实现链表的基本功能并结合算法题
数据结构,用Java实现链表 private class Node { private String data; private Node next; public Node(String dataPortioin) { data = dataPortioin; next = null; } public Node(String ...
虽然Java没有像C或C++那样的指针,但是通过对象引用,我们完全可以在Java中实现链表数据结构。这种实现方式不仅安全,而且易于理解和操作。通过链表,我们可以高效地处理动态数据集,执行插入、删除等操作,而无需...
Java实现链表中元素的获取、查询和修改方法详解 Java链表是一种重要的数据结构,它可以用来存储和管理数据。在Java中,链表可以通过LinkedList类来实现,但是在实际开发中,我们需要了解如何在链表中获取、查询和...
本篇文章将深入探讨如何使用Java实现链表,以及`LinkedList`类的相关特性和操作。 首先,链表不同于数组,它不连续存储数据。每个元素(节点)包含两部分:数据和指向下一个节点的引用。在Java的`LinkedList`中,每...
链表的Java实现 链表是一种非常重要的数据结构,它的应用非常广泛。在 Java 中,链表可以通过面向对象语言来实现。链表的特点是由一组相互连接的动态分配的结点组成,因此链表适用于进行频繁的修改、插入和删除等...
本篇文章将深入探讨如何使用Java实现链表的创建以及链表反转的过程,同时提供一个可能的调试代码参考。 首先,我们定义一个链表节点类`ListNode`,它包含一个数据域`val`和一个指向下一个节点的引用`next`: ```...
用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。
以下是使用迭代方式实现双向链表反转的Java代码: ```java public void reverse() { if (head == null || head.next == null) { return; } Node current = head; Node previous = null; while (current != ...
接下来,我们需要编写一个方法来实现链表的倒序。该方法接收链表的头结点作为参数,并返回倒序后的新的头结点。实现的逻辑大致分为以下几个步骤: 1. 初始化三个指针:`p`、`q`和`head`。 2. 使用循环逐个反转节点的...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...