sdlicong 发表于 2011-12-5 11:36:16

大家帮我看看这个代码,为什么运行正确

/*
   为什么错误的写法 可以得到正确的结果??
   this.root.delete(root,data);       //这种写法在理论上就不被理解,但怎么可以正确删除节点
   正确写法是this.root.next.delete(root,data);
*/

class Link{
        class Node{
                private String data;
                private Node next;
                public Node(String data){
                        this.data = data;
                        }
                public void add(Node node){
                        if(this.next == null){
                                this.next = node;
                        }else{
                                this.next.add(node);
                                }
                        }
                public void print(){
                        System.out.print(this.data+" ");
                        if(this.next != null){
                                this.next.print();
                                }
                        }
                public boolean search(String data){
                        if(data.equals(this.data)){
                                return true;
                        }else{
                                if(this.next!=null){
                                        return this.next.search(data);
                                }else{
                                        return false;
                                        }
                                }
                        }
                public void delete(Node previos,String data){
                        if(data.equals(this.data)){
                                previos.next = this.next;
                        }else{
                                if(this.next != null){
                                        this.next.delete(this,data);
                                        }
                                }
                        }
                }
        private Node root;
        public void addNode(String data){
                Node node = new Node(data);
                if(null==this.root){
                        this.root = node;
                }else{
                        this.root.add(node);
                        }
                }
        public void printNode(){
                if(this.root != null){
                        this.root.print();
                        }
                }
        public boolean contains(String name){
                return this.root.search(name);
                }
       
public void deleteNode(String data){
        if(data.equals(this.root.data)){
                this.root = this.root.next;
        }else{
                this.root.delete(root,data);       //这种写法在理论上就不被理解,但怎么可以正确删除节点
                //this.root.next.delete(root,data);    //这是正确写法
               
                }
        }
}
public class Demo1{
        public static void main(String args[]){
                Link li = new Link();
                li.addNode("A");
                li.addNode("B");
                li.addNode("C");
                li.addNode("D");
                li.addNode("E");
                li.addNode("F");
                System.out.println("\n=======删除之前=======");
                li.printNode();
                li.deleteNode("B");
                li.deleteNode("A");
                System.out.println("\n=======删除之后=======");
                li.printNode();
                System.out.println("\n"+li.contains("F"));
   }
}

spridu 发表于 2011-12-6 09:50:13

你要区分引用类型和基本类型。
页: [1]
查看完整版本: 大家帮我看看这个代码,为什么运行正确