帮我写个java的双向链表
时间: 2023-03-14 08:16:07 浏览: 60
我可以为你提供一个简单的java双向链表的例子:public class DoubleLinkedList {
private Node head;
private Node tail;
private int size; public DoubleLinkedList() {
head = null;
tail = null;
size = 0;
} public void add(Object data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
tail = newNode;
} else {
tail.setNext(newNode);
newNode.setPrevious(tail);
tail = newNode;
}
size++;
} public void add(Object data, int index) {
Node newNode = new Node(data);
Node current = head;
for (int i = 1; i < index && current.getNext() != null; i++) {
current = current.getNext();
}
newNode.setNext(current.getNext());
newNode.setPrevious(current);
current.setNext(newNode);
if (newNode.getNext() != null) {
newNode.getNext().setPrevious(newNode);
}
size++;
} public Object get(int index) {
if (index < 0) {
return null;
}
Node current = head;
for (int i = 0; i < index; i++) {
if (current.getNext() == null) {
return null;
}
current = current.getNext();
}
return current.getData();
} public boolean remove(int index) {
if (index < 1 || index > size) {
return false;
}
Node current = head;
for (int i = 0; i < index; i++) {
if (current.getNext() == null) {
return false;
}
current = current.getNext();
}
if (current == head) {
head = current.getNext();
} else {
current.getPrevious().setNext(current.getNext());
}
if (current == tail) {
tail = current.getPrevious();
} else {
current.getNext().setPrevious(current.getPrevious());
}
size--;
return true;
} public int size() {
return size;
} public String toString() {
Node current = head;
String output = "";
while (current != null) {
output += "[" + current.getData().toString() + "]";
current = current.getNext();
}
return output;
} private class Node {
Node next;
Node previous;
Object data; public Node(Object dataValue) {
next = null;
previous = null;
data = dataValue;
} public Node getNext() {
return next;
} public void setNext(Node nextValue) {
next = nextValue;
} public Node getPrevious() {
return previous;
} public void setPrevious(Node previousValue) {
previous = previousValue;
} public Object getData() {
return data;
} public void setData(Object dataValue) {
data = dataValue;
}
}
}