鱼C论坛

 找回密码
 立即注册
查看: 1285|回复: 2

求一个用Java实现的循环列表的代码,每行带注释的

[复制链接]
发表于 2023-10-31 22:57:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求一个用Java实现的循环链表的代码,每行带注释的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-31 22:59:18 | 显示全部楼层
下面是一个用Java实现的循环链表的代码,每行都带有注释:
public class CircularLinkedList<T> {
    private Node<T> head; // 头节点
    private Node<T> tail; // 尾节点

    // 节点类
    private static class Node<T> {
        T data; // 节点存储的数据
        Node<T> next; // 指向下一个节点的指针

        Node(T data) {
            this.data = data;
            this.next = null;
        }
    }

    // 在链表末尾添加节点
    public void add(T data) {
        Node<T> newNode = new Node<>(data);
        if (head == null) {
            head = newNode;
            tail = newNode;
            tail.next = head; // 将尾节点的next指向头节点,形成循环
        } else {
            tail.next = newNode; // 将尾节点的next指向新节点
            tail = newNode; // 更新尾节点为新节点
            tail.next = head; // 将尾节点的next指向头节点,形成循环
        }
    }

    // 在链表指定位置插入节点
    public void insert(int index, T data) {
        if (index < 0 || index > size()) {
            throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size());
        }

        Node<T> newNode = new Node<>(data);
        if (index == 0) {
            newNode.next = head; // 将新节点的next指向头节点
            head = newNode; // 更新头节点为新节点
            tail.next = head; // 将尾节点的next指向头节点,形成循环
        } else {
            Node<T> current = head;
            for (int i = 0; i < index - 1; i++) {
                current = current.next; // 找到要插入位置的前一个节点
            }
            newNode.next = current.next; // 将新节点的next指向当前节点的next
            current.next = newNode; // 将当前节点的next指向新节点
            if (current == tail) {
                tail = newNode; // 如果插入位置是尾节点后面,则更新尾节点为新节点
            }
        }
    }

    // 删除链表指定位置的节点
    public void remove(int index) {
        if (index < 0 || index >= size()) {
            throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size());
        }

        if (index == 0) {
            head = head.next; // 将头节点指向下一个节点
            tail.next = head; // 将尾节点的next指向头节点,形成循环
        } else {
            Node<T> current = head;
            for (int i = 0; i < index - 1; i++) {
                current = current.next; // 找到要删除节点的前一个节点
            }
            current.next = current.next.next; // 将当前节点的next指向要删除节点的下一个节点
            if (current.next == head) {
                tail = current; // 如果删除的是尾节点,则更新尾节点为当前节点
            }
        }
    }

    // 获取链表的大小
    public int size() {
        int count = 0;
        Node<T> current = head;
        while (current != null) {
            count++;
            current = current.next;
            if (current == head) {
                break; // 如果回到头节点,说明遍历完整个循环链表
            }
        }
        return count;
    }
}

这段代码实现了一个循环链表的基本功能,包括在链表末尾添加节点、在指定位置插入节点、删除指定位置的节点以及获取链表的大小。循环链表的特点是尾节点的next指向头节点,形成一个循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-31 23:01:19 | 显示全部楼层
isdkz 发表于 2023-10-31 22:59
下面是一个用Java实现的循环链表的代码,每行都带有注释:

测试代码呢1???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表