1. 程式人生 > 其它 >在for迴圈中建立雙向連結串列

在for迴圈中建立雙向連結串列

測試類

    @Test
    public void test() {
        Node head = new Node(0); // 建立頭節點
        Node tail = null; // 定義尾節點
        Node temp = head; // 臨時節點,相當於一個遊標,初始化指向頭節點

        for (int i = 1; i <= 10; i++) {
            Node newNode = new Node(i); // 新增節點
            temp.next = newNode; // 遊標.next指向新節點
            newNode.pre = temp; // 新節點.pre指向當前遊標

            tail = newNode; // 把新增節點作為尾節點
            temp = newNode; // 遊標向後移動
        }

        // 已知頭節點情況下,從前向後遍歷
        StringJoiner headJoiner = new StringJoiner(" -> ");
        Node cursor = head;
        while (null != cursor) {
            headJoiner.add(String.valueOf(cursor.index));
            cursor = cursor.next; // 遊標向後移動
        }
        System.out.println("head : " + headJoiner.toString()); // 列印

        // 已知尾節點情況下,從後向遍歷
        StringJoiner tailJoiner = new StringJoiner(" -> ");
        cursor = tail;
        while (null != cursor) {
            tailJoiner.add(String.valueOf(cursor.index));
            cursor = cursor.pre; // 遊標向前移動
        }
        System.out.println("tail : " + tailJoiner.toString()); // 列印
    }
}

// 自定義節點物件
class Node {
    int index;
    Node pre; // 前驅節點引用
    Node next; // 後繼節點引用

    public Node(int index) {
        this.index = index;
    }
}

列印結果:

head : 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10
tail : 10 -> 9 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0