
This course includes our updated coding exercises so you can practice your skills as you learn.
See a demo
How to get the most out of this course
Set up your coding environment for the data structures and algorithms course by using browser coding exercises first, then configure IntelliJ, create a DSA project, and run a hello world program.
Explore the first big O notation, O(n), by running a for loop that executes n times and prints items from 0 to n-1, illustrating a proportional line on a graph.
In this lecture on big o, learn how to drop constants and simplify o(2n) to o(n) when two n-time loops run, clarifying the role of constants in algorithm analysis.
Illustrate how nested for loops yield O(n^2) time complexity and compare it to O(n), highlighting how restructuring code can reduce run time and improve efficiency.
Apply drop non-dominants to simplify big O by showing that O(n^2) plus n reduces to O(n^2) as n grows, using nested loops and a separate for loop.
Compare linked lists to array lists, highlighting dynamic length and noncontiguous memory; define head and tail pointers, and nodes with next pointers ending in null, to illustrate basic structure.
Code the remove last method for a linked list, handling empty and single-node edge cases, updating head, tail, and length, and returning the removed node.
Learn how to remove the first item from a linked list by updating head, using a temp node, and handling empty, one-item, and multi-item edge cases.
Implement the set method for a linked list by using the get method to locate a node at an index, update its value, and return true or false.
Implement the remove method for a linked list, deleting the node at a given index and returning the removed node, with bounds checks for out-of-range indices and updating the links.
Reverse a linked list in place by flipping arrows with head, tail, and a temp pointer, using after and before to traverse and a for loop across its length.
Explore the has loop exercise by using slow and fast pointers to detect a cycle in a linked list, distinguishing end-of-list cases from loops and understanding the no-code strategy.
Learn to convert a binary linked list to decimal by a doubling accumulator: start with the first node, then double the total and add the next node value.
Implement remove last method for a doubly linked list by moving tail to tail.previous, breaking tail.next connection, and returning the removed node, while handling empty and single-item edge cases.
Implement the remove first method for a doubly linked list, handle empty and single-item edge cases, update head and links, return the removed node, and test the method.
Create a set method for a doubly linked list that updates a node's value at an index using get, returning true on success or false if out of range.
Implement a doubly linked list insert method that places a new node at a given index, handling edges with prepend and append, updating pointers and length, and returning a boolean.
Implement a remove method for a doubly linked list that validates the index, uses existing remove first/last for ends, unlinks middle nodes, updates length, and returns the removed node.
Explore partitioning a doubly linked list for values less than five and those greater than or equal to five, and address the edge case when the second list is empty.
Explore stacks with the tennis ball analogy, learn LIFO behavior, and implement stacks using array lists or linked lists by push and pop, focusing on top operations and Big-O performance.
Build a stack constructor by creating a node with a value (and next), set top to that node, and height to one, removing the bottom pointer.
Create a push method for a stack in Java, handling an empty stack by setting top to a new node and linking to the top when items exist, increase height.
Build queue by creating node class with value and next, and queue class with first, last, length. Initialize with a node and expose get first, get last, get length.
Implement the dequeue operation for a queue, handling empty, one-item, and multi-item cases, returning the dequeued node and updating first, last, and length accordingly.
Welcome to Data Structures & Algorithms in Java
This course makes learning to code fun and makes hard concepts easy to understand.
How did I do this? By using animations!
Animating the Data Structures & Algorithms makes everything more visually engaging and allows students to learn more material - in less time - with higher retention (a pretty good combination).
I will use these visuals to guide you, step-by-step, through the entire course.
The course also includes dozens-and-dozens of Coding Exercises. So you can immediately put everything into practice as soon as you learn it (a very important step).
All of this will help you to feel more confident and prepared when you walk into a coding interview.
I have made several Free Sample Videos available for the course so you can see the difference the animations make.
Also, I am very active on the Q&A, so I will be with you every_step_of _the_way.
_____________________________
What you will get in this course…
Over 100 hand-crafted animated HD videos to illustrate the Data Structures & Algorithms.
Here are the topics we will cover:
Technical
Big O notation
Data Structures
Arrays
Array Lists
Linked Lists
Doubly Linked Lists
Stacks & Queues
Binary Trees
Hash Tables
Heaps
Graphs
Algorithms
Dynamic Programming
Sorting
Bubble Sort
Selection Sort
Insertion Sort
Merge Sort
Quick Sort
Searching
Breadth First Search
Depth First Search
Don't just take my word for it though, check out what existing students have to say about my courses:
5-Star Review:
"In order to describe this course accurately, we need the definition of the word Beautiful. beau·ti·ful: adjective 1.- pleasing the senses or mind aesthetically. 2.- of a very high standard; excellent." - Josue Hernandez Amezcua
5-Star Review:
"The best course on DSA on Udemy" - Enlai Li
5-Star Review:
"One of the best courses on DSA. The animations do make a huge impact. All the points are explained in detail. The only problem is that I can't give it more than a 5-star rating." - Nikita Sarkar
5-Star Review:
"Amazing Course. My words cannot describe how much animations helped me to understand the concepts. 100% Recommended." - Simarjeet Singh
5-Star Review:
Being a visual learner this is BY FAR the BEST course ever. The way the instructor presents this topic makes it so easy to understand." - Eduardo SN
5-Star Review:
"The animations were really helpful for an easy understanding, but the best thing about this course for me is that it will not waste your time! It is perfectly optimized, covers the important topics that I wanted, and at the same time perfectly clear. Thank you so much." - Fatemeh Moghaddam
5-Star Review:
"This course is very well done! ... the animations in each video take the explanation and understanding of the material to a new level." - Luis Felipe Posada
5-Star Review:
"This course has seriously been amazing. The animations have worked wonders for my understanding and I have made significant progress from the beginning of the course until now." - Dakota Fabro
5-Star Review:
"I can follow as a beginner, amazing." - Sabrina Fung
5-Star Review:
"This is the best course I have ever seen" - Luong Viet Tri
REMEMBER… I'm so confident that you'll love this course that we're offering a FULL money-back guarantee for 30 days! So it's a complete no-brainer, sign up today with ZERO risk and EVERYTHING to gain.
So what are you waiting for? Click the "Buy now" button and join the best Java Data Structures & Algorithms course on Udemy.
I look forward to seeing you in the course.
Now let's get started! :-)