📅  最后修改于: 2023-12-03 15:39:33.565000             🧑  作者: Mango
循环列表(Circular List)是一种链表的变种,它的最后一个节点指向第一个节点,形成环状。在Java中,可以使用自定义类来实现循环列表的功能。
下面给出一个Java实现循环列表的示例代码:
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
this.next = null;
}
}
class CircularList {
ListNode head;
ListNode tail;
CircularList() {
this.head = null;
this.tail = null;
}
public void insert(int val) {
ListNode newNode = new ListNode(val);
if (head == null) {
head = newNode;
tail = newNode;
tail.next = head;
} else {
tail.next = newNode;
tail = newNode;
tail.next = head;
}
}
public void delete(int val) {
if (head == null) return;
if (head.val == val) {
head = head.next;
tail.next = head;
return;
}
ListNode curr = head;
while (curr.next != head) {
if (curr.next.val == val) {
curr.next = curr.next.next;
return;
}
curr = curr.next;
}
}
public boolean search(int val) {
if (head == null) return false;
ListNode curr = head;
while (curr != tail) {
if (curr.val == val) return true;
curr = curr.next;
}
if (curr.val == val) return true;
return false;
}
public void printList() {
if (head == null) {
System.out.print("List is empty");
return;
}
ListNode curr = head;
do {
System.out.print(curr.val + " ");
curr = curr.next;
} while (curr != head);
}
}
其中,ListNode类表示链表节点,CircularList类则实现了循环列表的基本功能:插入节点、删除节点、查找节点、输出循环列表。
以下是一个使用循环列表的示例:
CircularList cl = new CircularList();
cl.insert(1);
cl.insert(2);
cl.insert(3);
cl.printList(); // output: 1 2 3
System.out.println(cl.search(2)); // output: true
cl.delete(2);
cl.printList(); // output: 1 3
循环列表是链表的一种变种,可以通过构造一个环状链表来实现。Java中也可以使用自定义类来实现循环列表的基本功能。循环列表的插入、删除、查找操作与链表基本一致。