1. 程式人生 > >資料結構---自定義單向連結串列(Java實現)

資料結構---自定義單向連結串列(Java實現)

單向連結串列是指每一個節點記憶體在一個指向下一個節點的指標,java中就是節點存在指向下一個節點的物件引用

下面是Node節點類

public class Node {
    private Object object;
    private Node next;
    
    public Object getObject() {
        return object;
    }
    public void setObject(Object object) {
        this.object = object;
    }
    public Node getNext() {
        return next;
    }
    public void setNext(Node next) {
        this.next = next;
    }

}

單向連結串列實現類

/**
 * @author wcx
 */
public class LinkedNode {
    private Node head;
    private int nodeIndex = 0;

    public LinkedNode() {
        head = new Node();
    }

    /**
     * 獲取下一個元素
     * @return
     */
    public Node next() {
        Node node = select(nodeIndex);
        nodeIndex++;
        return node;
    }
    
    /**
     * 判斷是否存在下一個元素
     * @return
     */
    public boolean hasNext() {
        Node select = select(nodeIndex);
        if (select == null)
            return false;
        return select.getNext() != null;
    }

    public void add(Node next) {
        Node last = last();
        last.setNext(next);
    }

    public void delete(int index) {
        int nodeIndex = -1;

        Node node = head;

        while (node.getNext() != null) {
            nodeIndex++;
            if (nodeIndex == index) {
                Node next = node.getNext().getNext();
                node.setNext(next);
            }
            node = node.getNext();

            if (node == null)
                return;
        }
    }

    public Node select(int index) {
        int nodeIndex = -1;

        Node node = head;
        while (node.getNext() != null) {
            if (nodeIndex == index)
                return node;

            node = node.getNext();
            nodeIndex++;
        }
        return null;
    }

    /**
     * 查詢到最後一個連結串列元素
     * @return
     */
    private Node last() {
        Node node = head;
        while (node.getNext() != null)
            node = node.getNext();
        return node;
    }

    
    /**
     * 列印連結串列資訊
     */
    public void printf() {
        if (head.getNext() == null)
            return;
        Node node = head.getNext();

        System.out.println("================begin====================");
        while (node.getNext() != null) {
            System.out.print(node.getObject() + "  ");
            node = node.getNext();
        }
        System.out.println(node.getObject());
    }
}