双端链表
package linked;
public class DoubleLinkedListTest {
public static void main(String[] args) {
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
doubleLinkedList.addTail(1);
doubleLinkedList.addHead(0);
doubleLinkedList.addTail(2);
doubleLinkedList.display();
}
}
class DoubleLinkedList{
private int size;
private Node head;
private Node tail;
public DoubleLinkedList() {
size = 0;
head = null;
tail = null;
}
private class Node {
private Object data;
private Node next;
public Node(Object data) {
this.data = data;
}
@Override
public String toString() {
return "Node [ data=" + data + ", next=" + next + "]";
}
}
public int getSize() {
return size;
}
public Object addHead(Object data) {
Node newNode = new Node(data);
if (size == 0) {
head = newNode;
tail = newNode;
} else {
newNode.next = head;
head = newNode;
}
size++;
return newNode;
}
public Object addTail(Object data) {
Node newNode = new Node(data);
if (size == 0) {
head = newNode;
tail = newNode;
} else {
tail.next = newNode;
tail = newNode;
}
size++;
return newNode;
}
public Object deleteHead() {
Object obj = null;
if (size == 0) {
return obj;
} else if (size == 1) {
obj = head.data;
head = null;
tail = null;
size--;
} else {
obj = head;
head = head.next;
size--;
}
return obj;
}
public Node find(Object data) {
Node current = head;
int tmpSize = size;
while (tmpSize > 0) {
if (data.equals(current.data)) {
return current;
} else {
current = current.next;
}
tmpSize--;
}
return null;
}
public boolean isEmpty() {
return (size == 0);
}
public Object delete(Object value) {
if (isEmpty()) {
return false;
}
Node current = head;
Node previous = head;
while (!value.equals(current.data)) {
if (current.next == null) {
return false;
} else {
previous = current;
current = current.next;
}
}
if (size == 1) {
head = null;
tail = null;
size--;
} else if (current == head) {
head = head.next;
size--;
} else if (current == tail) {
previous.next = null;
tail = previous;
size--;
} else {
previous.next = current.next;
size--;
}
return true;
}
public void display() {
if (size > 0) {
Node current = head;
int tmpSize = size;
if (tmpSize == 1) {
System.out.print("[" + head + "]");
return;
}
while (tmpSize > 0) {
if (current == head) {
System.out.print("[" + current.data + "->");
} else if (current.next == null) {
System.out.print(current.data + "]");
} else {
System.out.print(current.data + "->");
}
tmpSize--;
current = current.next;
}
System.out.println();
} else {
System.out.println("[]");
}
}
}
双端链表实现队列
package linked;
public class QueueDoublelinkedListTest {
public static void main(String[] args) {
QueueDoubleLinkedList queueDoubleLinkedList = new QueueDoubleLinkedList();
queueDoubleLinkedList.insert(1);
queueDoubleLinkedList.insert(2);
queueDoubleLinkedList.insert(3);
System.out.println(queueDoubleLinkedList.delete());
queueDoubleLinkedList.display();
}
}
class QueueDoubleLinkedList{
private DoubleLinkedList doubleLinkedList;
public QueueDoubleLinkedList() {
doubleLinkedList = new DoubleLinkedList();
}
public void insert(Object data) {
doubleLinkedList.addTail(data);
}
public Object delete() {
return doubleLinkedList.deleteHead();
}
public boolean isEmpty() {
return doubleLinkedList.isEmpty();
}
public int getSize() {
return doubleLinkedList.getSize();
}
public void display() {
doubleLinkedList.display();
}
}