📅  最后修改于: 2023-12-03 15:16:37.326000             🧑  作者: Mango
循环链表是一种特殊的链表,在链表的最后一个节点连接到链表的第一个节点,形成一个环状结构。循环链表没有特定的头节点,因此可以从任意节点开始遍历整个链表,循环链表的删除操作与普通链表删除操作略有不同。
以下是Java程序从循环链表的开头删除一个节点的示例代码:
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
class CircularLinkedList {
Node head;
public CircularLinkedList() {
this.head = null;
}
// 在循环链表的开头插入节点
public void insert(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
head.next = head;
} else {
Node curr = head;
while (curr.next != head) {
curr = curr.next;
}
curr.next = newNode;
newNode.next = head;
head = newNode;
}
}
// 从循环链表的开头删除一个节点
public void delete() {
if (head == null) {
System.out.println("循环链表为空");
return;
}
// 只有一个节点的情况
if (head.next == head) {
head = null;
} else {
Node curr = head;
while (curr.next != head) {
curr = curr.next;
}
curr.next = head.next;
head = head.next;
}
}
// 打印循环链表
public void display() {
if (head == null) {
System.out.println("循环链表为空");
return;
}
Node curr = head;
do {
System.out.print(curr.data + " ");
curr = curr.next;
} while (curr != head);
}
}
public class Main {
public static void main(String[] args) {
CircularLinkedList list = new CircularLinkedList();
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
System.out.println("循环链表删除前:");
list.display();
list.delete();
System.out.println("循环链表删除后:");
list.display();
}
}
以上程序中,定义了一个循环链表类CircularLinkedList,其中包括insert()方法(在循环链表的开头插入节点)、delete()方法(删除循环链表的开头节点)和display()方法(打印循环链表)。在程序入口Main类中,通过调用CircularLinkedList类中的insert()方法插入4个节点,调用display()方法打印整个循环链表,然后调用delete()方法删除循环链表的开头节点,再次调用display()方法打印整个循环链表。
需要注意的是,在delete()方法中,若循环链表为空,需输出提示信息;若循环链表只有一个节点,则将头节点置为null;其他情况下需找到最后一个节点curr,将其next指向head.next,再将头节点置为head.next。