使用Java使用數據結構中的單鏈表

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章