鱼C论坛

 找回密码
 立即注册
查看: 2479|回复: 1

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

[复制链接]
发表于 2011-12-5 11:36:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
   为什么错误的写法 可以得到正确的结果??
   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"));
   }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-6 09:50:13 | 显示全部楼层
你要区分引用类型和基本类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 19:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表