package linkNode;
/**
* 链表类
* @author Administrator
*
*/
class Link{
/**
* 节点
* @author Administrator
*
*/
class Node {
private String data; //节点数据
private Node next; //下一个节点
public Node(String data){
this.data= data;
}
/**
* 增加新节点,在链表的末尾增加<即每次在链表的末尾增加新的节点>
* @param newNode
*/
public void addNode(Node newNode) {
if(this.next == null){
//将新节点设这为该节点的下一个节点
this.next = newNode;
} else {
//如果该节点的下一个节点不为空,则递归调用该节点的addNode(Node newNode)方法
this.next.addNode(newNode);
}
}
/**
* 递归打印节点内容
*/
public void printNode() {
System.out.print(this.data + " ");
if(this.next!=null){
//如果该节点的下一个节点不为空,则递归调用下一个节点的printNode()方法
this.next.printNode();
}
}
/**
* 查找是否有节点内容与data相等,即查找链表中是否有某节点
* @param root
* @param data2
* @return
*/
public boolean search(String data) {
if(this.next != null){
//如果下一个节点不为空,则查找下一个节点
if(this.next.data.equals(data)){
return true;
} else {
//递归查找
return this.next.search(data);
}
}
else {
//如果下一个节点为空,则返回false
return false;
}
}
/**
* 删除内容为data的节点
* @param previous
* @param data
*/
public void deleteNode(Node previous, String data) {
if(this.data.equals(data)){
previous.next = this.next;
}
if(this.next != null){
this.next.deleteNode(this, data);
}
}
}
private Node root; //根节点
/**
* 向链表中增加节点
* @param data 节点内容
*/
public void add(String data){
Node newNode = new Node(data);
if(this.root == null){
this.root = newNode;
} else {
this.root.addNode(newNode); //增加新节点,并调用节点类的addNode()方法
}
}
/**
* 打印链表内容
*/
public void print(){
if(this.root != null){
this.root.printNode(); //调用Node类中的printNode()方法
}
}
/**
* 查找链表中是否存在节点内容
* @param data
* @return 存在返回true,不存在返回false
*/
public boolean contains(String data){
//从跟节点开始往下查
if(this.root.data.equals(data)){
return true;
} else {
return this.root.search(data);
}
}
/**
* 根据节点内容删除节点
* @param data
*/
public void delete(String data){
if(this.root.data.equals(data)){
this.root = this.root.next;
} else {
if(root.next != null){
this.root.next.deleteNode(root,data);
}
}
}
}
/**
* 单链表的实现<增加,查找,删除>
* @author Administrator
*
*/
public class LinkDemo2 {
public static void main(String[] args) {
Link l = new Link();
l.add("A"); //向链表中增加节点
l.add("B"); //向链表中增加节点
l.add("C"); //向链表中增加节点
l.add("D"); //向链表中增加节点
l.add("E"); //向链表中增加节点
l.add("F"); //向链表中增加节点
l.add("B"); //向链表中增加节点
l.add("G"); //向链表中增加节点
l.add("H"); //向链表中增加节点
l.add("I"); //向链表中增加节点
l.add("J"); //向链表中增加节点
l.add("K"); //向链表中增加节点
l.print();
System.out.println("\n链表中是否含有Z\t" + l.contains("Z"));
l.delete("B");
l.delete("F");
l.delete("O");
System.out.println("删除B,O,F后链表中的内容");
l.print();
}
}