前言

LinkedList的底层是双向链表,实现了Queue接口,可以作为队列、栈来使用,有着很多与双向链表操作相关的API,且有一部分API功能相同,又容易与Stack的部分API混淆。所以在这里记下其作为双端队列使用时常用的API,刷题的时候能第一时间想起来正确的接口去使用即可。

示例

简单来说就是:

  • LinkedList:add、peek、remove
  • Stack:push、peek、pop

LinkedList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void testQueue() {
LinkedList<Integer> q = new LinkedList<>();
// 添加到队尾 -> 1
q.add(1);
// 添加到队首 -> 2 1
q.addFirst(2);
// 添加到队尾 -> 2 1 3
q.add(3);
// 取队首元素 -> [2] 1 3
System.out.println(q.peek());
// 取队尾元素 -> 2 1 [3]
System.out.println(q.peekLast());
// 删除并返回队首元素 -> 1 3
System.out.println(q.remove());
// 删除并返回队尾元素 -> 1
System.out.println(q.removeLast());
}

Stack

1
2
3
4
5
6
7
8
9
10
11
12
public static void testStack() {
Stack<Integer> s = new Stack<>();
// 入栈 / 压栈 -> 1 2 3
s.push(1);
s.push(2);
s.push(3);
// 取栈顶元素 -> 1 2 [3]
System.out.println(s.peek());
// 返回并删除栈顶元素
System.out.println(s.pop());
}
}