Java数据结构——循环链表的实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013293125/article/details/52950105

一、描述
循环链表:表中的最后一个节点的指针域指向头结点,整个链表形成一个环。

循环链表判空条件:有的说是判断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());
    }

}

三、结果截图
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u013293125/article/details/52950105