class Link{ class Node{ private String name; private Node next; public Node(String name){ this.name = name ; } public String getName(){ return this.name; } public Node getNext(){ return this.next; } public void addNode(Node newNode){ if (this.next == null){ this.next = newNode; //如果当前调用对象的下一个叫节点为空,那么就在该当前节点后插入新的节点。 }else{ this.next.addNode(newNode); //如果当前节点的下一个节点不为空,那么通过this.next继续查找下一个节点是否为空。(下一个叫节点).addNode(newNode) } } public void delNode(Node preNode , String name){ if (this.name.equals(name)){ preNode.next = this.next; //如果当前节点就是要删除的节点,则把当前节点的前一节点的next值设为,下一节点的next值,从而是链表断开。 }else{ this.next.delNode(this,name); } } public boolean searchNode(String name){ if (this.getName().equals(name)){ return true; //如果当前节点的name值与参数name相等,则返回true }else{ if(this.next.searchNode(name)){ return true; }else{ return false; } } } public void printNode(){ System.out.print(this.name); //输入当前节点的name。 if (this.next != null){ System.out.print("->"); this.next.printNode(); //如果当前节点的下一节点不为空,则继续调用printNode方法输出下一节点name。如果为空的话,则不继续查找下一节点。 } } } private Node root; public void add(String name){ Node newNode = new Node(name); //声明一个新的Node的实例化对象。 if (this.root == null){ this.root = newNode; //如果root为空,那么就把当前的实例化对象作为root。 }else{ this.root.addNode(newNode); //如果root不为空,则直接通过root调用addNode方法,并把新的实例化对象作为参数传递。 } } public void print(){ if (this.root != null) this.root.printNode(); //如果当前链表对象的root不为空,则直接通过root调用Node类中的printNode()方法。 } public boolean search(String name){ if (this.root.searchNode(name)){ return true; }else{ return false; } } public void delete(String name){ if (search(name)){ if (this.root.getName().equals(name)){ this.root = this.root.next; //该变根节点。 }else{ this.root.next.delNode(root,name); } }else{ System.out.println("This node is not exits"); } } } public class LinkDemo02{ public static void main(String args[]){ Link link = new Link(); link.add("第一节点"); link.add("第二节点"); link.add("第三节点"); link.add("第四节点"); link.add("第五节点"); link.delete("第三节点"); link.delete("第一节点"); link.print(); System.out.println(); link.add("第一节点"); link.print(); System.out.println(); link.add("第三节点"); link.print(); // System.out.println(link.search("第二节点")); } }