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

简单的建立一个链表,表头是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. extJs学习基础3 ajax与php交互

    extJs代码: <script src="build/ext-all.js"></script> <script src="build/p ...

  2. iOS不得姐项目--pop框架的初次使用

    一.pop和Core Animation的区别 1.Core Animation的动画只能添加到layer上 2.pop的动画能添加到任何对象 3.pop的底层并非基于Core Animation,是 ...

  3. 基于@Aspect的AOP配置

    1. Spring 除了支持Schema 方式配置 AOP,还支持注解方式:使用 @Aspect 来配置 2. Spring 默认不支持 @Aspect 风格的切面声明,通过如下配置开启@Aspect ...

  4. sql-将一个表中的数导入另一个表中

    1.如果2张表的字段一致,并且希望插入全部数据 可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表;例: insert into insertTest select ...

  5. Android中图像变换Matrix的原理、代码验证和应用(三)

    第三部分 应用 在这一部分,我们会将前面两部分所了解到的内容和Android手势结合起来,利用各种不同的手势对图像进行平移.缩放和旋转,前面两项都是在实践中经常需要用到的功能,后一项据说苹果也是最近才 ...

  6. 怎么给我的Office文档加密

    很多的用户朋友都可以熟练的使用office中的Word.Excel和PowerPoint文档,但大家对Office文档加密方式了解的并不多.Advanced Office Password Recov ...

  7. matlab 获取鼠标位置

    转载:http://hi.baidu.com/alec1228/item/68ea36ebe4046f3a86d9deab 第一种途径:ginput()函数 ginput提供了一个十字光标使我们能更精 ...

  8. Java反射的一些理解

    1.Class对象 VS. 实例对象 在Java中我们一般是这样使用类的:编写类,然后new对象,再调用方法.这里new出来的对象暂且称之为实例对象(instance).其实在这之前还涉及到一个Cla ...

  9. 【BZOJ-2521】最小生成树 最小割

    2521: [Shoi2010]最小生成树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 415  Solved: 242[Submit][Statu ...

  10. iptables常规使用

    0x00 简介 iptables防火墙由Netfilter项目开发,自linux2.4就融入了内核.linux内核中的Netfilter框架可将数据包操作函数挂接至网络栈.iptables便在这个框架 ...