Java中隊列的使用
- 注意事項
- curd
- create
- add(obj): 增加一個元素,如果隊列已滿,則拋出異常
- offer(obj): 添加一個元素並返回true,如果隊列已滿,則返回false
- update
- set(index, obj)
- retrieve
- element(): 返回隊列頭部的元素,如果隊列為空,則拋出一個NoSuchElementException異常
- peek(): 返回隊列頭部的元素,如果隊列為空,則返回null
- delete
- remove(): 移除並返回隊列頭部的元素,如果隊列為空,則拋出一個NoSuchElementException異常
- poll(): 移除並返問隊列頭部的元素,如果隊列為空,則返回null
- create
- 樣例
- 內部實現
- 內部類 Node
- 雙向鏈表,有頭尾指針
- 查找的時候會根據 index 決定用 head 往后還是用 last 往前
注意事項
java.util.Queue是一個抽象類,不能實例化java.util.LinkedList實現了Queue,可以當作隊列來使用
樣例
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode類
* @return int整型ArrayList<ArrayList<>>
*/
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
// write code here
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
if (root == null) return res;
LinkedList<TreeNode> nodes = new LinkedList<>();
nodes.add(root);
while (!nodes.isEmpty()) {
int n = nodes.size();
ArrayList<Integer> layer = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
TreeNode head = nodes.poll();
layer.add(head.val);
if (head.left != null) nodes.add(head.left);
if (head.right != null) nodes.add(head.right);
}
res.add(layer);
}
return res;
}
}
