用java实现循环链表

我们知道,链表是最基本的一种数据结构,在实际开发过程中也有很大用处,以下是我用java写的循环链表的定义以及一些基本操作:

public class circleLinkedList {

    // 定义元素数据类型(链表)
    public class Element {
    private Element next = null;
    private Object value = null;
    }

    private Element header = null;

    // 初始化链表
    public void initLinkedList(Object o) {
    header = new Element();
    header.value = o;
    header.next = header;
    }

    // 插入元素
    public void insertElement(Object o) {
    Element e = new Element();
    e.value = o;
    if (header.next == header) {
        header.next = e;
        e.next = header;
    } else {
        // 栈中temp和header同指向堆中initLinkedList中new的的Element对象
        Element temp = header;
        while (temp.next != header) {
        temp = temp.next;
        }
        temp.next = e;
        e.next = header;
    }
    }

    // 删除元素
    public void deleteElement(Object o) {
    Element temp = header;
    while (temp.next != header) {
        if (temp.next.value != o) {
        temp = temp.next;
        } else {
        temp.next = temp.next.next;
        break;
        }
    }

    }

    // 链表中是否存在该元素
    public Boolean isContianed(Object o) {
    Element temp = header;
    while (temp.next.value != o) {
        temp = temp.next;
        if (temp.next == header) {
        return false;
        }
    }
    return true;
    }

    // 链表长度
    public int circleLinkedListSize(Element first) {
    Element temp = first;
    int size = 1;
    try {
        while (temp.next != first) {
        size++;
        temp = temp.next;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return size;
    }

    /**
     * 获取链表的第i个位置的元素
     * */
    public Element getElement(int i) {
    if (i <= 0 || i > circleLinkedListSize(header)) {
        System.out.println("获取链表的位置有误!返回null");
        return null;
    } else {
        int count = 0;
        Element element = new Element();
        Element temp = header;
        while (temp.next != header) {
        count++;
        if (count == i) {
            element.value = temp.next.value;
        }
        temp = temp.next;
        }
        return element;
    }
    }

循环链表与单链表的不同就是头指针初始化的时候,有一句header.next = header;这样就使得链表头尾相接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值