public class Link {
class Node { // 把节点类定义成内部类
private String data;
private Node next;
public Node(String Data) {
this.data = data;
}
/**
* 添加节点的方法
*/
public void add(Node newNode) { // 增加add方法
if (this.next == null) { // 判断下一个节点是否为空
this.next = newNode;// 如果下一个节点为空,则设置下一个节点为newNode
} else { // 如果不为空
this.next.add(newNode);// 调用下一个节点的add方法
}
}
/**
* 打印方法
*/
public void print() {
System.out.print(this.data+"\t");
if (this.next != null) { //如果下一个节点不为空,则继续打印
this.next.print(); //输出下一个节点
}
}
/**
* 搜索方法
*/
public boolean search(String data) {//内部定义搜索方法
if (data.equals(this.data)) { //判断当前节点的名字是否与查找的一致
return true; //如果一直,返回true
} else { //继续判断下一个
if (this.next != null) { //下一个节点存在则继续查找
return this.next.search(data);//返回下一个的查询结果
}
}
return false; //没找到,则返回false
}
/**
* 删除节点
*/
public void delete(Node Previous, String data) {
if (data.equals(this.data)) { //找到了匹配的节点
Previous.next = this.next; //空出当前节点
} else {
if (this.next != null) {
this.next.delete(this, data); //继续向下找
}
}
}
}
private Node root; // 表示根节点
/**
* 添加方法
*/
public void addNode(String data) {
Node newNode = new Node(data); //建立一个新的节点
if (this.root == null) { //判断是否有根节点
this.root = newNode; //赋值根节点
} else {
this.root.add(newNode); //添加到合适位置
}
}
/**
* 输出所有信息
*/
public void printNode() {
if(this.root!=null){ //判断是否存在根节点
this.root.print(); //输出所有节点信息
}
}
/**
* 判断是否包含某元素
*/
public boolean contains(String data){
return this.root.search(data); //调用Node类的search方法
}
/**
* 删除方法
*/
public void deleteNode(String data){
if(this.contains(data)){ //判断是否存在查找的信息
if(this.root.data.equals(data)){ //判断符合的节点是否为根节点
this.root=this.root.next; //将根节点之后的内容设置为根节点
}else{
this.root.next.delete(root, data); //删除节点
}
}
}
}