简述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
}
}
在这个示例中,我们创建了一个有序循环链表,并插入了几个元素。然后,我们打印链表以验证插入操作是否正确。