📌  相关文章
📜  Java程序从循环链表的开头删除一个节点(1)

📅  最后修改于: 2023-12-03 15:16:37.326000             🧑  作者: Mango

Java程序从循环链表的开头删除一个节点

循环链表是一种特殊的链表,在链表的最后一个节点连接到链表的第一个节点,形成一个环状结构。循环链表没有特定的头节点,因此可以从任意节点开始遍历整个链表,循环链表的删除操作与普通链表删除操作略有不同。

以下是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。