A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面是链表的源码,我的疑问在删除节点的方法那里。麻烦大虾看一下:),如果我的理解错了,那么该怎样理解呢?

class Link{
    class Node{
        private String name ;    // 保存节点的名字
        private Node next ;        // 保存下一个节点
        public Node(String name){
            this.name = name ;
        }
        public String getName(){
            return this.name ;
        }
        public void addNode(Node newNode){
            if(this.next==null){    // 后面没有东西
                this.next = newNode ;
            }else{
                this.next.addNode(newNode) ;    // 向下继续查
            }
        }
        public void printNode(){
            System.out.print(this.name + " --> " ) ;
            if(this.next!=null){
                this.next.printNode() ;    // 向下继续列出
            }
        }
        public boolean searchNode(String name){
            if(this.name.equals(name)){
                return true ;
            }else{
                if(this.next!=null){
                    return this.next.searchNode(name) ;
                }else{
                    return false ;
                }
            }
        }
        public void deleteNode(Node preNode,String name){
            if(this.name.equals(name)){
                preNode.next = this.next ;
            }else{
                this.next.deleteNode(this,name) ;
            }
        }
    };
    private Node root ;    // 要定义出根节点
    public void add(String name){
        Node newNode = new Node(name) ;
        if(this.root==null){    // 没有根节点,则把第一个作为根节点
            this.root = newNode ;
        }else{
            this.root.addNode(newNode) ;
        }
    }
    public void print(){
        if(this.root!=null){
            this.root.printNode() ;
        }
    }
    public boolean search(String name){    // 指定查找的名字
        if(this.root!=null){
            return this.root.searchNode(name) ;
        }else{
            return false ;
        }
    }
    public void delete(String name){
        if(this.search(name)){    // 判断此节点是否存在
            if(this.root.name.equals(name)){//此处可以理解为:外部类的属性root可以调用内部类中的私有属性name吗?
                if(this.root.next!=null){
                    this.root = this.root.next ;    // 改变根节点
                }else{
                    this.root = null ;    // 取消
                }
            }else{
                if(this.root.next!=null){
                    this.root.next.deleteNode(root,name) ;
                }
            }
        }
    }
};
public class LinkDemo02{
    public static void main(String args[]){
        Link link = new Link() ;
        link.add("根节点") ;
        link.add("第一节点") ;
        link.add("第二节点") ;
        link.add("第三节点") ;
        link.add("第四节点") ;
        link.add("第五节点") ;
        link.print() ;
        System.out.println() ;
        // System.out.println(link.search("第x节点")) ;
        link.delete("第四节点") ;
        link.delete("根节点") ;
        link.print() ;
    }
};

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
嗯!可以这样理解
回复 使用道具 举报
什么是私有属性啊?私有,私有,顾名思义就是私有的嘛,既然是私有的,外面的可以访问吗?私有属性只可以本类有权访问,那我们怎样访问私有属性呢?java为了解决这一问题提供一个公共的方法get()和set()方法,你的代码里就有get()方法,你为什么不用呢??
回复 使用道具 举报
其实是root这个类调用自己的私有属性name。
只不过这个root类是外部类自己声明的一个类。
和在main()方法里声明一个类,然后在用这个类调用私有成员一样。实质还是私有成员的对象在调用自己的私有成员。
回复 使用道具 举报
官文昌 发表于 2012-8-3 21:21
什么是私有属性啊?私有,私有,顾名思义就是私有的嘛,既然是私有的,外面的可以访问吗?私有属性只可以本 ...

`        已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马