/*
第一个节点称为:头节点,或根节点
[示例]:内部类实现单链表
*/
class Link
{
private Node head; //定义头节点,是链表的一个成员变量,是Node类的对象
public void add(String name) //添加链表中的元素(节点)
{
Node newNode= new Node(name);
if(this.head==null) //如果没有头节点就把头节点作为头节点
{
this.head=newNode;
}
else
{
//从根节点开始判断插不插,头节点后面如果没有节点就插在头结点后面,
//有的话就再判断下一个节点后面有木有... 目的是插在最后面
this.head.addNode(newNode); //addNode是内部类的方法
}
}
public boolean search(String name) //查找节点
{
if(head!=null) //首先检测头节点
{
return this.head.searchNode(name); //searchNode是内部类的方法
}
else
{
return false;
}
}
public void delete(String name) //删除链表中的元素
{
if(this.search(name)) //先看看这个链表中有没有这个节点的名字
{
//这个this是链表本身,不是指节点,而head只是链表的一个成员变量
//而对于Node类来说,head是它的实例对象
if(this.head.name.equals(name)) //如果发现要删除的是头节点
{
if(this.head.nextNode!=null)
{
this.head=this.head.nextNode; //将头节点的下一个节点变成根节点
}
else
{
this.head=null; //如果只有一个头节点,删除之后就木有节点了
}
}
else //如果要删除的不是头节点,就看看是不是要删除头节点的下一个节点
{
if(this.head.nextNode!=null)
{
this.head.nextNode.deleteNode(head,name); //deleteNode是内部类的方法
}
}
}
}
public void print() //打印
{
if(this.head!=null)
{
this.head.printNode();
}
}
//----------- 内部类 -----------------//
class Node //使用内部类的话,每一个节点就是一个Node对象
{
private String name; //保存节点名称
private Node nextNode; //保存下一个节点
public Node(String name) //构造
{
this.name=name;
}
public void setNextNode(Node nextNode) //设置下一个节点
{
this.nextNode=nextNode;
}
public Node getNextNode() //获取下一个节点
{
return this.nextNode;
}
public String getName() //获取节点名称,我们的节点简单,就只有名称
{
return this.name;
}
public void addNode(Node newNode) //添加节点
{
if(this.nextNode==null)//如果不存在下一个节点,就将新节点插到它的后面
{
this.nextNode=newNode; //加在最后一个位置
}
else
{
this.nextNode.addNode(newNode); //否则就让下一个节点判断插不插,嵌套调用
}
}
public boolean searchNode(String name) //通过名称查找节点
{
if(this.name.equals(name)) //比较当前节点是否符合
{
return true;
}
else
{
if(nextNode!=null) //下一个节点不为空就继续比较
{
return this.nextNode.searchNode(name);//否则就继续查找,递归查找下一个节点
}
else
{
return false;
}
}
}
public void deleteNode(Node preNode,String name) //删除节点
{
if(this.name.equals(name)) //如果当前节点名称就是所要要删除的
{
preNode.nextNode=this.nextNode;//将this的下一个节点引用传给this的上一个节点保存
}
else
{
this.nextNode.deleteNode(this,name);//递归下个节点确认其名称是否就是要删除的
}
}
public void printNode() //打印节点
{
s.tp(this.name+"->");
if(this.nextNode!=null)
{
this.nextNode.printNode();
}
}
}
}
class Demo
{
public static void main(String[] args) throws Exception
{
Link l= new Link();
l.add("火车头");
l.add("1号车厢");
l.add("2号车厢");
l.add("3号车厢");
l.add("4号车厢");
l.add("5号车厢");
l.print();
s.op();
s.op("删除后-----------------------------------------------");
l.delete("5号车厢");
l.print();
}
}
class s //万能打印
{
public static void op(Object obj)
{
System.out.println(obj); //打印并换行
}
public static void op()
{
System.out.println(); //打印空行
}
public static void tp(Object obj)
{
System.out.print(obj); //打印不换行
}
}
- 大小: 125.8 KB
- 大小: 67.3 KB
分享到:
相关推荐
Java学习笔记:JavaSe、Spring、JVM、MySQL、MyBatis...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
Java项目学习笔记: SSM实战项目——Java高并发秒杀API,详细流程+学习笔记
java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...
java学习笔记,java基础知识,只用于个人学习。
(完整版)最全的java学习笔记(必看).pdf
Java基础 java学习笔记 Java Java基础Markdown学习笔记,可转换成PDF、Word等格式
java鬼混笔记:JAVA发邮箱(带附件)
java学习笔记.doc java学习笔记 java学习 学习笔记 java
Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...
Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^
Java Swing组件:Jlist学习笔记Java Swing组件:Jlist学习笔记
JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记JAVA学习笔记
Java学习笔记(必看经典) Java学习笔记(必看经典) Java学习笔记(必看经典)
java学习笔记java学习笔记java学java学习笔记习笔记
在学习java过程中的笔记。
java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0开始学习 java学习笔记,从0...
良葛格的Java学习笔记~讲解得非常详细。JDK5.0的~是Java入门的不错选择。
该文档是本人的学习笔记,尚未精修,后续会精修排版. 学习笔记:深入浅出 Java 虚拟机.docx