Linked Lists - Deque (Double-ended queue) Implement a nested class DoubleNode for building doubly-linked lists, where each node contains a reference to the item preceding it and the item following it in the list (null if there is no such item). Then implement methods for the following tasks: Insert at the beginning Insert at the end Remove from the beginning Remove from the end Insert before a give node Insert after a given node Remove a given node Move to front (move an object to the front) Move to end (moved and object to the end) Stacks - Evaluating Arithmetic Expressions Write a class ArithmeticExpreisionEvaluator that evaluates an infix arithmetic expression. Do this is two steps First, convert the infix expression to a postfix expression: create a filter Infix To Postfix that converts an arithmetic expression from infix to postfix. Second, evaluate the postfix expression: write a postfix evaluator EvaluatePostfix that takes a postfix expression, evaluates it and print the value. Your program should print the infix expression, postfix expression, and the final result. Write a program that generates mazes of arbitrary size using the union-find algorithm. A simple algorithm to generate the maze is to start by creating an N times M grid of cells separated by walls on all sides, except for entree and exit. then continually choose a wall randomly, and knock it down if, the cells are not already connected to each other. If we repeat the process until the starting and ending cells are connected, we have a maze. It is better to continue knocking down the walls until every cell is reachable from every cell as this would generate more false leads in the maze. Test you algorithm by creating a 10 times 10 grid, and print all the walls that have been knocked down. Draw the resulting maze (hand-drawing is acceptable)