【數據結構】使用 Java 實現單鏈表

鏈表

鏈表定義

n個節點離散分配,彼此通過指針相連,每個節點只有一個前驅節點,每個節點只有一個後續節點,首節點沒有前驅節點,尾節點沒有後續節點。

鏈表優點

  • 插入刪除快

鏈表缺點

  • 存取速度慢

Java 實現單鏈表

public class MyNode {

    /**
     * 鏈表保存的數據
     */
    private int data;

    /**
     * 鏈表的下一個節點
     */
    private MyNode next;

    /**
     * 構造函數
     *
     * @param data
     */
    public MyNode(int data) {
        this.data = data;
    }

    /**
     * 添加節點
     *
     * @param myNode
     */
    public MyNode append(MyNode myNode) {
        // 取出當前節點
       MyNode currentNode = this;
       // 循環判斷是否爲最後一個節點
       while (true) {
           // 取出下一個節點
           MyNode nextNode = currentNode.next;
           // 如果爲空,說明爲最後一個節點
           if (nextNode == null) {
               break;
           } else {
               // 否則繼續尋找下一個節點
               currentNode = nextNode;
           }
       }
       // 最後一個節點的 next 賦值新添加的元素
       currentNode.next = myNode;
       return myNode;
    }

    /**
     * 刪除下一個節點
     */
    public void removeNext() {
        // 記錄下下個節點的信息
        MyNode nextNode = this.next.next;
        // 刪除下一個節點
        this.next = nextNode;
    }

    /**
     * 顯示鏈表
     */
    public void show() {
        MyNode currentNode = this;
        while (true) {
            if (currentNode != null) {
                System.out.print(currentNode.getData() + "\t");
                currentNode = currentNode.next;
            } else {
              break;
            }
        }
        System.out.println();
    }

    /**
     * 插入一個節點
     *
     * @param myNode
     */
    public void insert(MyNode myNode) {
        // 記錄下一節點信息
        MyNode nextNode = this.next;
        // 下一個節點指向要添加的節點
        this.next = myNode;
        // 連接原來的節點
        myNode.next = nextNode;
    }

    /**
     * 獲取當前節點的數據
     *
     * @return
     */
    public int getData() {
        return this.data;
    }

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