链表的每一个节点中除了要保存本身的内容之后,还要保存下一个节点的引用

简单的建立一个链表,表头是root

//=================================================
// File Name : linked list demo
//------------------------------------------------------------------------------
// Author : Common // 类名:Node
// 成员:1.节点内容
//    2.下一个节点
// 方法:1.得到节点内容
//    2.设置下一个节点
//    3.取得下一个节点
class Node {
private String data; //保存节点内容
private Node next; //保存下一个节点 public Node(String data){ //构造方法设置节点内容
this.data = data;
} public String getData(){ //得到节点内容
return this.data;
} public void setNext(Node next){ //设置下一个节点
this.next = next;
} public Node getNext(){ //取得下一个节点
return this.next;
}
}; //主类
//Function : linked list
public class linkdemo { //主方法
public static void main(String[] args) {
// TODO 自动生成的方法存根
Node root = new Node("火车头"); //定义根节点
Node n1 = new Node("车厢A"); //定义第1个车厢
Node n2 = new Node("车厢B"); //定义第2个车厢
Node n3 = new Node("车厢C"); //定义第3个车厢
root.setNext(n1); //火车头的下一个节点是第1个车厢
n1.setNext(n2); //第1个车厢的下一个节点是第2个车厢
n2.setNext(n3); //第2个车厢的下一个节点是第3个车厢
printNode(root);
} //输出方法,全局方法
//输出节点的内容
public static void printNode(Node node){
System.out.println(node.getData()); //输出数据
if(node.getNext() != null){ //判断节点是否为空
printNode(node.getNext()); //继续向下打印
}
} }

使用了内部类

在链表中进行删除、查询操作

//=================================================
// File Name : linked list demo
//------------------------------------------------------------------------------
// Author : Common class Link{ // 成员:1.root
private Node root; //建立根节点 // 方法:1.添加节点方法
public void addNode(String data){
Node newNode = new Node(data); //建立一个新的节点
if(this.root == null){
this.root = newNode; //如果没有根节点,则把上面建立的节点设置成根节点
}else{
this.root.add(newNode); //如果有根节点,则把上面建立的节点设置成root节点后非空的节点
}
}; // 方法:2.输出全部节点方法
public void printNode(){ //输出节点的内容
if(this.root != null){ //判断是否存在根节点
this.root.print(); //继续向下打印
}
}; // 方法:3.判断元素是否存在
public boolean contains(String name){ //判断元素是否存在
return this.root.search(name); //调用Node类中的search()方法
}; // 方法:4.删除节点
public void deleteNode(String data){ //删除节点
if(this.contains(data)){ //判断节点是否存在
if(this.root.data.equals(data)){ //判断根节点是否满足要求
this.root = this.root.next; //将根节点之后的节点设置成根节点
}else{
this.root.next.delete(root, data); //删除节点
}
}
} // 内部类名:Node
// 成员:1.节点内容 2.下一个节点
// 方法:1.得到节点内容 2.设置下一个节点 3.取得下一个节点 4.添加下一个节点 5.从某处删除一个节点 6.节点的查询结果 7.输出方法
class Node {
private String data; //保存节点内容
private Node next; //保存下一个节点 public Node(String data){ //构造方法设置节点内容
this.data = data;
} public String getData(){ //1.得到节点内容
return this.data;
} public void setNext(Node next){ //2.设置下一个节点
this.next = next;
} public Node getNext(){ //3.取得下一个节点
return this.next;
} public void add(Node newNode){ //4.添加下一个节点
if(this.next == null){ //判断下一个节点是否为空
this.setNext(newNode); //如果下一个节点为空,则把新节点设置在next的位置上
}else{ //如果不为空,则表示还有下一个节点
this.next.add(newNode); //在下一个位置处增加
}
} public void delete(Node preNode,String data){ //5.从某处删除一个节点
if(data.equals(this.data)){ //找到了匹配的节点
preNode.next = this.next; //把前一个节点链接到后一个节点上
}else{
if(this.next != null){
this.next.delete(this, data); //继续向下找
}
}
} public boolean search(String data){ //6.定义搜索方法
if(data.equals(this.data)){ //判断当前节点的数据是否与查找的一致
return true;
}else{
if(this.next != null){ //如果下一个节点存在,就继续查找
return this.next.search(data); //返回下一个节点的查询结果
}else{
return false;
}
}
} public void print(){ //7.定义全部输出方法
System.out.print(this.data + "\t"); //没有判断是否存在根节点
if(this.next != null){ //如果下一个节点不为空的话,继续打印
this.next.print(); //继续打印下一个节点
}
} };
} //主类
//Function : linked list
public class linkdemo { //主方法
public static void main(String[] args) {
// TODO 自动生成的方法存根
Link l = new Link();
l.addNode("A");
l.addNode("B");
l.addNode("C");
l.addNode("D");
l.addNode("E");
System.out.println("===========删除之前===========");
l.printNode();
l.deleteNode("C");
l.deleteNode("D");
System.out.println();
System.out.println("===========删除之后===========");
l.printNode();
System.out.println();
System.out.println("查询节点:"+l.contains("A"));
} }

Java链表的更多相关文章

  1. JAVA 链表操作:循环链表

    主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...

  2. Java链表基本操作和Java.util.ArrayList

    Java链表基本操作和Java.util.ArrayList 今天做了一道<剑指offer>上的一道编程题“从尾到头打印链表”,具体要求如下:输入一个链表,按链表值从尾到头的顺序返回一个A ...

  3. JAVA链表中迭代器的实现

    注:本文代码出自<java数据结构和算法>一书. PS:本文中类的名字定义存在问题,Link9应改为Link.LinkList9应该为LinkList.由于在同包下存在该名称,所以在后面接 ...

  4. JAVA 链表操作:单链表和双链表

    主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...

  5. java 链表数据结构

    首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了.下面直接进入正题: 先要定义一个结点类 ...

  6. Java 链表

    按链表的组织形式分有ArrayList和LinkList两种.ArrayList内部其实是用数组的形式实现链表,比较适合链表大小确定或较少对链表进行增删操作的情况,同时对每个链表节点的访问时间都是co ...

  7. 算法_栈与队列的Java链表实现

    链表是一个递归的数据结构,它或者为null,或者是指向一个结点的引用,该结点含有一个泛型的元素和指向另一个链表的引用.可以用一个内部类来定义节点的抽象数据类型: private class Node ...

  8. 学习记录 java 链表知识

    01.import java.util.HashMap; 02.import java.util.Scanner; 03.import java.util.Stack; 04. 05./** 06. ...

  9. Java链表的一些操作:

    [还有一些其他的算法提]http://blog.csdn.net/WalkingInTheWind/article/category/906980 [转]http://blog.csdn.net/lu ...

  10. 面试中的Java链表

    链表作为常考的面试题,并且本身比较灵活,对指针的应用较多.本文对常见的链表面试题Java实现做了整理. 链表节点定义如下: static class Node { int num; Node next ...

随机推荐

  1. mysql union和union all的区别

    union 对两个结果集进行并集操作,重复数据只显示一次 Union All,对两个结果集进行并集操作,重复数据全部显示 工具/原料 mysql 数据库 方法/步骤   student表数据   使用 ...

  2. svn做目录访问控制(AuthzSVNAccessFile)

    这个是Apache的配置文件 加载模块和svn的相关设置

  3. [转]Mybatis极其(最)简(好)单(用)的一个分页插件

    原文地址:http://blog.csdn.net/isea533/article/details/23831273 分页插件示例:http://blog.csdn.net/isea533/artic ...

  4. flex布局知识点

    flexBox 布局最合适小规模布局,而网格布局适合较大规模布局. float,clear,vertical-align  在flex中不起作用. flex布局中,有两类作用于父节点也子节点的样式,大 ...

  5. LightOJ 1341 唯一分解定理

    Aladdin and the Flying Carpet Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld &a ...

  6. win7安装nodejs

    刚刚在网上看到Cheerio,为服务器特别定制的,快速.灵活.实施的jQuery核心实现,适合各种Web爬虫程序. 看了下,cheerio 是nodejs的抓取页面模块 于是决定先学习下nodejs了 ...

  7. html特殊符号

    1                     ´ ´ © © > > µ µ ® ® & & ° ° ¡ ¡     » » ¦ ¦ ÷ ÷ ¿ ¿ ¬ ¬ § § • • ...

  8. 74.Android之四种启动模式

    转载:http://www.cnblogs.com/meizixiong/archive/2013/07/03/3170591.html 一.启动模式介绍 启动模式简单地说就是Activity启动时的 ...

  9. 使用StyleCop进行代码审查

    使用StyleCop进行代码审查 工欲善其事,必先利其器,上篇简单介绍了怎样使用Astyle进行代码格式化,使编写的代码具有一致的风格.今天简单介绍下怎样使用StyleCop对原代码进行审查,看编写的 ...

  10. MongoDB: 数据库复制

    db.copyDatabase("from","to","127.0.0.1:16161"); 将127.0.0.1上的from库.拷贝到t ...