Java集合LinkedList模拟队列

65 篇文章 1 订阅

前言

下午写LeetCode期间需要使用广度优先搜索算法,配合队列这种数据结构,队列数据结构的特性可以参考我之前的文章: 队列的学习

在java里使用队列可以用LinkedList集合进行模拟


方法

使用LinkedList集合,并使用其中的addLast、removeFirst、isEmpty等API集体模拟队列操作

入队列

void addLast(E e); // 将元素插入此列表的结尾


出队列

E removeFirst(); // 移除并返回列表的第一个元素


判空

boolean isEmpty(); // 判断队列是否为空 


示例代码

package coreJavaOne;

import java.util.LinkedList;
import java.util.NoSuchElementException;

public class SimulateQueue {
    private LinkedList<Integer> queue = new LinkedList<Integer>();

    public boolean isEmpty() {
        return this.queue.isEmpty();
    }

    public void enQueue(int data) {
        this.queue.addLast(data);
    }

    public int deQueue() throws NoSuchElementException {
        return this.queue.removeFirst();
    }

    public static void main(String[] args) {
        SimulateQueue q = new SimulateQueue();

        q.enQueue(1);
        q.enQueue(2);
        q.enQueue(3);

        while (! q.isEmpty()) {
            int data = q.deQueue();
            System.out.println(data);
        }
    }
}


层次遍历二叉树

对应到LeetCode上的一道题目,很容易看出是广度优先搜索,需要队列的辅助

题目

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

AC代码

import java.util.ArrayList;
import java.util.LinkedList;


public class BinaryTreeLevelOrderTraversal {
    static class TreeNode {
        public int val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int x) {
            this.val = x;
        }
    }

    public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        TreeNode p;
        int data;

        if (root == null) {
            return list;
        } else {
            queue.addLast(root);
        }

        while (!queue.isEmpty()) {
            ArrayList<Integer> sublist = new ArrayList<Integer>();
            LinkedList<TreeNode> subQueue = new LinkedList<TreeNode>();

            while (!queue.isEmpty()) {
                p = queue.removeFirst();
                sublist.add(p.val);

                if (p.left != null) {
                    subQueue.addLast(p.left);
                }

                if (p.right != null) {
                    subQueue.addLast(p.right);
                }
            }

            list.add(sublist);
            queue.addAll(subQueue);
        }

        return list;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值