Appearance
链表天然的支持栈和队列数据结构,我们能很方便使用链表进行实现,先来看一下定义栈的接口。
java
public interface Stack<E> {
int getSize();
boolean isEmpty();
void push(E e);
E pop();
E peek();
}
使用链表编码实现栈结构
java
public class LinkedListStack<E> implements Stack<E> {
private LinkedList<E> list;
public LinkedListStack(LinkedList<E> list) {
this.list = new LinkedList<>();
}
@Override
public int getSize() {
return list.getSize();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public void push(E e) {
list.addFirst(e);
}
@Override
public E pop() {
return list.removeFirst();
}
@Override
public E peek() {
return list.getFirst();
}
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: top");
res.append(list);
return res.toString();
}
}
使用链表编码实现队列结构
java
public class LinkedListQueue<E> implements Queue<E> {
private class Node {
private E e;
private Node next;
public Node(E e) {
this(e, null);
}
public Node(E e, Node next) {
this.e = e;
this.next = next;
}
public Node() {
this(null, null);
}
@Override
public String toString() {
return e.toString();
}
}
private Node head, tail;
private int size;
public LinkedListQueue() {
head = null;
tail = null;
size = 0;
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void enqueue(E e) {
if (tail == null) {
tail = new Node();
head = tail;
} else {
tail.next = new Node(e);
tail = tail.next;
}
size++;
}
@Override
public E dequeue() {
if (head == null) {
throw new IllegalArgumentException("链表为空");
}
Node retHead = head;
head = head.next;
retHead.next = null;
if (head == null) {
tail = null;
}
size--;
return retHead.e;
}
@Override
public E getFront() {
return null;
}
}