用java代码创建一个循环链表
时间: 2023-11-08 07:06:02 浏览: 39
好的,这是一个关于编程的问题,我可以为您提供答案。
Java代码创建一个循环链表的示例:
```
class Node {
int data;
Node next;
}
class CircularLinkedList {
Node tail;
public void add(int value) {
Node newNode = new Node();
newNode.data = value;
if (tail == null) {
tail = newNode;
tail.next = tail;
} else {
newNode.next = tail.next;
tail.next = newNode;
tail = newNode;
}
}
}
```
您可以使用 add() 方法添加节点,并且 tail 节点始终指向链表的末尾。当您达到链表的末尾时,tail 节点将指向链表的头部,从而创建一个循环链表。
相关问题
java用LinkedList实现一个循环链表的代码
好的,以下是使用Java的LinkedList实现循环链表的示例代码:
```java
import java.util.LinkedList;
public class CircularLinkedList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
// 将最后一个元素链接到第一个元素,形成循环
list.getLast().next = list.getFirst();
// 遍历循环链表
Node current = list.getFirst();
for (int i = 0; i < list.size(); i++) {
System.out.println(current.data);
current = current.next;
}
}
private static class Node {
private String data;
private Node next;
public Node(String data) {
this.data = data;
}
}
}
```
该代码使用Java的LinkedList实现循环链表。它首先创建一个LinkedList对象,并向其添加元素。然后,它将最后一个元素链接到第一个元素,形成循环链表。最后,它遍历循环链表并打印每个元素的值。
写一个双向循环链表的Java代码
下面是一个简单的双向循环链表的Java代码实现:
```java
public class DoublyLinkedList<T> {
private Node<T> head;
private Node<T> tail;
private static class Node<T> {
private T data;
private Node<T> prev;
private Node<T> next;
public Node(T data) {
this.data = data;
this.prev = null;
this.next = null;
}
}
public DoublyLinkedList() {
head = null;
tail = null;
}
public boolean isEmpty() {
return head == null;
}
public void addFirst(T data) {
Node<T> newNode = new Node<>(data);
if (isEmpty()) {
head = newNode;
tail = newNode;
} else {
newNode.next = head;
head.prev = newNode;
head = newNode;
}
tail.next = head;
head.prev = tail;
}
public void addLast(T data) {
Node<T> newNode = new Node<>(data);
if (isEmpty()) {
head = newNode;
tail = newNode;
} else {
newNode.prev = tail;
tail.next = newNode;
tail = newNode;
}
tail.next = head;
head.prev = tail;
}
public void removeFirst() {
if (isEmpty()) {
throw new NoSuchElementException();
}
if (head == tail) {
head = null;
tail = null;
} else {
head = head.next;
head.prev = tail;
tail.next = head;
}
}
public void removeLast() {
if (isEmpty()) {
throw new NoSuchElementException();
}
if (head == tail) {
head = null;
tail = null;
} else {
tail = tail.prev;
tail.next = head;
head.prev = tail;
}
}
public void printList() {
if (isEmpty()) {
System.out.println("List is empty!");
} else {
Node<T> current = head;
do {
System.out.print(current.data + " ");
current = current.next;
} while (current != head);
System.out.println();
}
}
}
```
这个代码实现了双向循环链表的基本操作,包括添加节点、删除节点和遍历链表。可以通过创建一个DoublyLinkedList对象来使用这些操作。