跳到主要内容

简述Java实现有序循环链表插入 ?

参考答案:

有序循环链表是一种特殊的数据结构,它结合了有序链表和循环链表的特性。在有序循环链表中,元素按照某种顺序(如升序或降序)排列,并且链表的尾节点指向头节点,形成一个循环。

以下是一个使用Java实现有序循环链表插入操作的示例:

首先,定义一个节点类(Node):

public class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
    }
}

然后,定义一个有序循环链表类(OrderedCircularLinkedList):

public class OrderedCircularLinkedList {
    Node head;

    // 插入节点
    public void insert(int data) {
        Node newNode = new Node(data);

        if (head == null) {
            head = newNode;
            head.next = head;
        } else {
            Node current = head;
            boolean inserted = false;

            // 查找插入位置
            while (current.next != head && current.data < data) {
                current = current.next;
            }

            // 插入节点
            if (current.data > data) {
                Node nextNode = current.next;
                current.next = newNode;
                newNode.next = nextNode;
            } else if (current == head) {
                // 插入到链表头部
                head = newNode;
                newNode.next = head.next;
                head.next.next = head;
            }

            // 如果插入到链表尾部
            if (!inserted) {
                Node temp = head;
                while (temp.next != head) {
                    temp = temp.next;
                }
                temp.next = newNode;
                newNode.next = head;
            }
        }
    }

    // 打印链表
    public void printList() {
        if (head == null) {
            System.out.println("链表为空");
            return;
        }

        Node current = head;
        do {
            System.out.print(current.data + " ");
            current = current.next;
        } while (current != head);

        System.out.println();
    }
}

在这个实现中,insert 方法用于在有序循环链表中插入一个新的节点。它首先创建一个新的节点,然后查找插入位置。如果链表为空,新节点将成为头节点并指向自己。否则,遍历链表以找到正确的插入位置。插入操作完成后,需要处理几种特殊情况,包括插入到链表头部、插入到链表尾部以及插入到链表中间。

printList 方法用于打印链表的元素。它从头节点开始遍历链表,直到回到头节点为止。

以下是如何使用这个有序循环链表的示例:

public class Main {
    public static void main(String[] args) {
        OrderedCircularLinkedList list = new OrderedCircularLinkedList();

        list.insert(5);
        list.insert(2);
        list.insert(8);
        list.insert(1);
        list.insert(7);

        list.printList(); // 输出:1 2 5 7 8
    }
}

在这个示例中,我们创建了一个有序循环链表,并插入了几个元素。然后,我们打印链表以验证插入操作是否正确。