大家帮我看看这个代码,为什么运行正确
/*为什么错误的写法 可以得到正确的结果??
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"));
}
} 你要区分引用类型和基本类型。
页:
[1]