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("第二节点"));
}
}