`

java学习笔记:内部类实现单链表

    博客分类:
  • java
阅读更多



 



 

/*
第一个节点称为:头节点,或根节点

[示例]:内部类实现单链表
*/

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
0
1
分享到:
评论

相关推荐

    (完整版)最全的java学习笔记(必看).pdf

    Java学习笔记 Java是一种流行的编程语言,广泛应用于Android应用程序开发、Web应用程序开发、桌面应用程序开发等领域。以下是Java学习笔记的摘要信息: 一、Java技术基础 * 1.1 编程语言:Java是一种面向对象的...

    Java学习笔记:JSONObject与JSONArray的使用.docx

    Java学习笔记:JSONObject与JSONArray的使用.docx

    Java学习笔记:JSONObject与JSONArray的使用.pdf

    Java学习笔记:JSONObject与JSONArray的使用.pdf

    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学习笔记

    著作:《JAVA 学习笔记》、《Spring 技术手册》,为SUN官方教材主要编写成员之一 博客: http://blog.csdn.net/caterpillar_here 详细信息: http://www.china-pub.com/computers/common/info.asp?id=31664

    java学习笔记1

    Java学习笔记1 Java学习笔记1是学习Java过程中的笔记,主要记录了Eclipse开发环境中的快捷键使用、编辑功能、查找和调试等知识点。 Eclipse快捷键 Eclipse中有许多快捷键,掌握这些快捷键可以大大提高开发效率。...

    Java 学习笔记Java学习笔记

    4. 集合框架:Java集合框架是用于存储和操作对象的工具,包括List(如ArrayList和LinkedList)、Set(如HashSet和TreeSet)、Map(如HashMap和TreeMap)等接口及其实现类。它们提供了丰富的API用于添加、删除、查找...

    java学习笔记.zip

    java学习笔记java学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记.zipjava学习笔记...

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    Java学习笔记(必看经典).pdf

    本知识点的标题为“Java学习笔记(必看经典)”,意味着所整理的内容是针对Java初学者的一系列核心概念和原理的总结。 首先,面向对象编程是Java语言的核心,它与传统的面向过程编程有显著的不同。面向对象编程强调的...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    Java内部类是Java语言中一个独特且强大的特性,它允许我们在一个类的内部定义另一个类。内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态...

    Java 虚拟机学习笔记:Java 内存区域,垃圾收集,内存分配与回收策略,JVM 调优,文件结构,类加载机制,Java 程序

    Java 虚拟机学习笔记: Java 内存区域, 垃圾收集, 内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...

    Java JDK 5.0学习笔记:TP312JA L393.iso

    Java JDK 5.0学习笔记:TP312JA L393.iso 随书光盘,欢迎大家下载 大家共享^A^

    JAVA学习笔记达内内部使用,保证你没有看过

    1.1 编程语言:Java作为一种强类型、面向对象的编程语言,其设计目标是实现可移植性,使得编写一次,到处运行。 1.2 Java的特点:包括平台独立性、安全性、高效性、多线程支持、垃圾回收机制等。 1.3 Java开发环境...

    Java学习笔记(必看经典).doc

    2. **类和对象**:Java是一种面向对象的语言,因此理解类和对象的概念至关重要。类是对象的模板,它定义了对象的状态(属性)和行为(方法)。而对象则是类的实例,具有类所描述的属性和功能。 3. **封装、继承和...

    Java基础 学习笔记 Markdownr版

    1. 面向对象(OOP):Java的核心是面向对象编程,它将数据和操作数据的方法封装在一起,形成类。面向对象的三大特性——封装、继承和多态,在06面向对象(上)、07面向对象(中)和08面向对象(下)中进行了详细介绍...

    JAVA学习笔记 林信良

    此外,《JAVA学习笔记》还涵盖了集合框架,包括ArrayList、LinkedList、HashSet、HashMap等各种集合类的使用,以及泛型、迭代器和流API的应用。这些内容对于处理数据和实现复杂算法至关重要。 对于多线程编程,书中...

    java学习笔记markdown

    【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...

Global site tag (gtag.js) - Google Analytics