读书人

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

发布时间: 2012-08-31 12:55:03 作者: rapoo

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


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);   //打印不换行  }}

?

读书人网 >编程

热点推荐