1. 程式人生 > >Java單鏈表的簡單實現

Java單鏈表的簡單實現

連結串列是一種線性結構:一個前驅,一個後繼

特點:1:在記憶體中空間是不連續的(區別於陣列)

           2:和陣列相對比,查詢速度慢,插入刪除速度快

內部結構表示(省去get,set方法):

class MyLink {
    private Node head;   //頭節點

    class Node {          //節點
        private String data;  //存放資料
        private Node next;    //指向下一個節點
    }

    private int length; //連結串列長度
}
  

   insert(int i) //在指定位置插入元素

public void insert(int index, String data) {
        if (length < index || index < 0) {
            System.out.println("插入位置有誤!");
            return;
        }
        //插入到頭部
        if (index == 0) {
            Node newNode = new Node(data);
            newNode.next = head.next;
            head.next = newNode;
            length++;
            return;
        }
        //插入到尾部
        if (length == index) {
            Node newNode = new Node(data);
            Node temp = head;
            while (temp.next != null) {
                temp = temp.next;
            }
            temp.next = newNode;
            newNode.next = null;
            length++;
            return;
        }
        Node temp = head;
        for (int i = 0; i < index; i++) {
            temp = temp.next;
        }
        Node newNode = new Node(data);
        newNode.next = temp.next;
        temp.next = newNode;
        length++;
    }

  del(int i)   //在指定位置刪除元素

//刪除節點
    public void delete(int index) {
        if (index <= 0 || index > length) {
            System.out.println("刪除位置有誤!");
            return;
        }
        //刪除第一個節點
        if (index == 1) {
            Node temp = head.next;
            head.next = head.next.next;
            temp.next = null;
            length--;
            return;
        }
        //刪除最後一個節點
        if (index == length) {
            Node temp = head;
            while (temp.next.next != null) {
                temp = temp.next;
            }
            temp.next = null;
            length--;
            return;
        }
        //刪除最後一個節點
        Node temp = head;
        for (int i = 0; i < index - 1; i++) {
            temp = temp.next;
        }
        temp.next = temp.next.next;
        length--;
    }

   print() 遍歷連結串列

 //遍歷連結串列
    public void print() {
        if (head.next == null) {
            System.out.println("這是一個空表!");
            return;
        }
        Node temp = head;
        System.out.print("[head]-> ");
        while (temp.next != null) {
            System.out.print("[" + temp.next.data + "]-> ");
            temp = temp.next;
        }
        System.out.print("NULL");
        System.out.println();
    }