加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java篇:单链表实现(添加,搜索,删除,输出)-java内部类使用

(2012-08-24 21:52:06)
标签:

java

单链表

内部类

it

分类: Java天地

public class SingleLink {       

         public static void main(String[] args) {

                   // TODO Auto-generated method stub

                   Link link = new Link() ;

                   link.add(1) ;

                   link.add(2) ;

                   link.add(3) ;

                   link.add(4) ;

                   link.add(5) ;

                   link.add(6) ;

                   link.add(7) ;

                   System.out.println("链表初始化元素: ") ;

                   link.printLink() ;

                   System.out.println("\n搜索元素5结果: " + link.search(5)) ;

                   System.out.println("搜索元素8结果: " + link.search(8)) ;

                   link.delete(1) ;

                   link.delete(4) ;

                   link.delete(8) ;

                   System.out.println("删除元素148之后链表元素:") ;

                   link.printLink() ;

         }

}

class Link{

         class Node{                               //定义节点类,作为Link类的内部类

                   private int data ;                         //保存节点值

                   public Node(int data){

                            this.data = data ;

                   }

                  

                   private Node next ;                    //存放下一个节点

                   public void addNode(Node newNode){

                            if(this.next==null){

                                     this.next = newNode ;

                            }else{  //交给节点本身处理,因节点本身知道自己的下一个节点是谁

                                     this.next.addNode(newNode) ;

                            }

                   }

                   public void printNode(){

                            if(this.next!=null){    //从下一个节点开始判断,因为刚开始传进来的是根节点,是已经输出了的

                                     System.out.print(this.next.data + "\t") ;

                                     this.next.printNode() ;                       //循环输出

                            }

                   }

                   public boolean searchNode(int data){

                            if(this.next!=null){    //从下一个节点开始判断,因为刚开始传进来的是根节点,是已经比较过的

                                     if(this.next.data==data){

                                               return true ;

                                     }else{         //继续往下搜索,传入当前节点node.next

                                               return this.next.searchNode(data) ;

                                     }

                            }else{

                                     return false ;

                            }

                   }

                   public void deleteNode(int data){

                            if(this.next!=null){    //下一个节点不为空则继续

                                     if(this.next.data==data){

                                               this.next = this.next.next ;//删除节点

                                               return ;

                                     }else{

                                               this.next.deleteNode(data) ;//继续向下寻找

                                     }

                            }

                   }

         };

         private Node root ;                              //保存根节点

         public void add(int data){                   //添加节点

                   Node newNode = new Node(data) ;                           //新建一个节点

                   if(root==null){                //如果根节点为空,当前节点作为根节点

                            root = newNode ;

                   }else{

                            root.addNode(newNode) ;       //否则由根节点指定继续添加节点

                   }

         }

         public void delete(int data){

                   if(this.search(data)){                 //删除之前先判断元素是否存在

                            if(this.root!=null){

                                     if(this.root.data==data){          //如果是根节点

                                               this.root = this.root.next ;//删除根节点--将下一个节点作为根节点

                                     }else{        //交给节点本身处理,继续下行判断,因节点本身知道自己的下一个节点是谁

                                               this.root.deleteNode(data) ;

                                     }

                            }

                   }

         }

         public boolean search(int data){

                   if(this.root!=null){             //根节点不为空

                            if(this.root.data==data){                   //与根节点进行比较

                                     return true ;          //相等则找到,返回true

                            }else{                          //不相等则继续往下找

                                     return this.root.searchNode(data) ;        //把待查找的数据传入,交给节点本身来处理

                            }

                   }else{

                            return false ;

                   }

         }

         public void printLink(){               //打印链表

                   if(this.root!=null){

                            System.out.print(this.root.data + "\t") ;

                            this.root.printNode() ;     //交给节点类本身来处理     

                   }

         }

};

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有