写一个双向循环链表的Java代码并创建一个DoublyLinkedList对象来验证它
时间: 2024-03-13 18:44:31 浏览: 215
好的,以下是一个双向循环链表的Java代码:
```java
public class DoublyLinkedList {
private Node head;
private Node tail;
public DoublyLinkedList() {
this.head = null;
this.tail = null;
}
public void insertFirst(int data) {
Node newNode = new Node(data);
if (isEmpty()) {
tail = newNode;
} else {
head.setPrev(newNode);
}
newNode.setNext(head);
head = newNode;
head.setPrev(tail);
tail.setNext(head);
}
public void insertLast(int data) {
Node newNode = new Node(data);
if (isEmpty()) {
head = newNode;
} else {
tail.setNext(newNode);
newNode.setPrev(tail);
}
tail = newNode;
tail.setNext(head);
head.setPrev(tail);
}
public void deleteFirst() {
if (isEmpty()) {
throw new NoSuchElementException();
}
if (head == tail) {
head = null;
tail = null;
} else {
head = head.getNext();
head.setPrev(tail);
tail.setNext(head);
}
}
public void deleteLast() {
if (isEmpty()) {
throw new NoSuchElementException();
}
if (head == tail) {
head = null;
tail = null;
} else {
tail = tail.getPrev();
tail.setNext(head);
head.setPrev(tail);
}
}
public boolean isEmpty() {
return head == null;
}
public void printList() {
if (isEmpty()) {
System.out.println("List is empty");
} else {
Node current = head;
do {
System.out.print(current.getData() + " ");
current = current.getNext();
} while (current != head);
System.out.println();
}
}
private class Node {
private int data;
private Node next;
private Node prev;
public Node(int data) {
this.data = data;
this.next = null;
this.prev = null;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node getPrev() {
return prev;
}
public void setPrev(Node prev) {
this.prev = prev;
}
}
}
```
这个DoublyLinkedList类包含了双向循环链表的基本操作,如在链表开头和末尾插入节点、删除链表开头和末尾的节点、判断链表是否为空以及打印链表中的节点。注意,在双向循环链表中,头节点的prev指向尾节点,尾节点的next指向头节点。
现在我们可以创建一个DoublyLinkedList对象并使用它的方法来操作链表。例如:
```java
// 创建一个DoublyLinkedList对象
DoublyLinkedList my_list = new DoublyLinkedList();
// 在链表末尾添加节点
my_list.insertLast(1);
my_list.insertLast(2);
my_list.insertLast(3);
// 在链表开头添加节点
my_list.insertFirst(0);
// 打印链表中的所有节点
my_list.printList();
// 删除链表中的一个节点
my_list.deleteLast();
// 再次打印链表中的所有节点
my_list.printList();
```
这样,我们就可以创建、操作和打印一个DoublyLinkedList对象了。
阅读全文