鱼C论坛

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

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

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

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

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

x
求一个用Java实现的循环链表的代码,每行带注释的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. public class CircularLinkedList<T> {
  2.     private Node<T> head; // 头节点
  3.     private Node<T> tail; // 尾节点

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

  8.         Node(T data) {
  9.             this.data = data;
  10.             this.next = null;
  11.         }
  12.     }

  13.     // 在链表末尾添加节点
  14.     public void add(T data) {
  15.         Node<T> newNode = new Node<>(data);
  16.         if (head == null) {
  17.             head = newNode;
  18.             tail = newNode;
  19.             tail.next = head; // 将尾节点的next指向头节点,形成循环
  20.         } else {
  21.             tail.next = newNode; // 将尾节点的next指向新节点
  22.             tail = newNode; // 更新尾节点为新节点
  23.             tail.next = head; // 将尾节点的next指向头节点,形成循环
  24.         }
  25.     }

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

  31.         Node<T> newNode = new Node<>(data);
  32.         if (index == 0) {
  33.             newNode.next = head; // 将新节点的next指向头节点
  34.             head = newNode; // 更新头节点为新节点
  35.             tail.next = head; // 将尾节点的next指向头节点,形成循环
  36.         } else {
  37.             Node<T> current = head;
  38.             for (int i = 0; i < index - 1; i++) {
  39.                 current = current.next; // 找到要插入位置的前一个节点
  40.             }
  41.             newNode.next = current.next; // 将新节点的next指向当前节点的next
  42.             current.next = newNode; // 将当前节点的next指向新节点
  43.             if (current == tail) {
  44.                 tail = newNode; // 如果插入位置是尾节点后面,则更新尾节点为新节点
  45.             }
  46.         }
  47.     }

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

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

  67.     // 获取链表的大小
  68.     public int size() {
  69.         int count = 0;
  70.         Node<T> current = head;
  71.         while (current != null) {
  72.             count++;
  73.             current = current.next;
  74.             if (current == head) {
  75.                 break; // 如果回到头节点,说明遍历完整个循环链表
  76.             }
  77.         }
  78.         return count;
  79.     }
  80. }
复制代码


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

使用道具 举报

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

测试代码呢1???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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