📜  循环列表java(1)

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

循环列表Java

循环列表(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中也可以使用自定义类来实现循环列表的基本功能。循环列表的插入、删除、查找操作与链表基本一致。