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();
}
}