1. 程式人生 > >Java資料結構——迴圈連結串列的實現

Java資料結構——迴圈連結串列的實現

一、描述
迴圈連結串列:表中的最後一個節點的指標域指向頭結點,整個連結串列形成一個環。

迴圈連結串列判空條件:有的說是判斷p或p->next是否等於頭指標,有的說判斷tail是否等於head,有的說判斷head是否為空,這其實要根據實際情況來判斷。若是不帶頭結點(這裡說帶頭結點是隻一個空的節點做為頭結點)迴圈連結串列,則可以用判斷head是否為空來判斷連結串列是否為空。若是帶頭結點,則可以根據判斷tail是否等於head來判斷迴圈連結串列是否為空。

迴圈連結串列的操作和線性連結串列基本一致,這裡就只是簡單地介紹一下。

帶頭結點的迴圈連結串列如下:
這裡寫圖片描述

不帶頭結點的迴圈連結串列如下:


這裡寫圖片描述

二、程式碼實現
2.1 CircleLinkList.java

package com.yds.list;

public class CircleLinkList<T>{
    Node head,tail;
    Node p;
    int size = 0;
    public CircleLinkList(){
        this.head = null;
        tail = head;
        p = head;
    }
    public int length(){
        return size;
    }
    /**
     * 新增節點
     * @param
data */
public void add(T data){ Node node = new Node<T>(data); if(head==null){ head = node; tail = head; p = head; size++; } else{ node.next = head; head = node; tail.next = head; p = head; size++; } } /** * 得到資料 * @param
index * @return */
public T get(int index){ int i = 0; p = head; while(i!=index&&p!=tail){ i++; p = p.next; } return (T) p.data; } /** * 不帶頭結點的頭插法,所謂不帶頭結點是指不帶為空的頭結點。 * 所以判斷連結串列為空的條件不一樣 * @return */ public boolean isEmpty(){ if(head!=null) return false; else return true; } }

2.2 JavaMain.java

package com.yds.list;

public class JavaMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CircleLinkList<Integer>listA = new CircleLinkList<Integer>();
        int[] la = {
                1,3,2,5,4,8
        };
        System.out.println("迴圈連結串列是否為空?"+listA.isEmpty());
        for (int i = 0; i < la.length; i++) {
            listA.add(la[i]);
        }
        for (int i = 0; i < listA.length(); i++) {
            System.out.println(listA.get(i));
        }
        System.out.println("迴圈連結串列長度:"+listA.length());
        System.out.println("迴圈連結串列是否為空?"+listA.isEmpty());
    }

}

三、結果截圖
這裡寫圖片描述