This is a great resource for learning data structures and algorithms. It's set up like the phase challenges that you're used to doing and have great, concise explanations of all the concepts.
- https://github.com/Devbootcamp/data-structures-and-algorithms-unit
- https://hackr.io/tutorials/learn-data-structures-algorithms
Or, if you learn better via video, this course:
Here are short explanations for Mergesort and Quicksort that are readable:
- https://interactivepython.org/courselib/static/pythonds/SortSearch/TheQuickSort.html
- https://www.tutorialspoint.com/data_structures_algorithms/merge_sort_algorithm.htm
- http://www.tutorialspoint.com/data_structures_algorithms/linked_lists_algorithm.htm
- https://leetcode.com/tag/linked-list
Q1: Find the middle element in a singly linked list. Click here for the solution Q2: https://www.hackerrank.com/contests/programming-interview-questions/challenges/m-th-to-last-element
- http://www.stoimen.com/blog/2012/06/22/computer-algorithms-binary-search-tree-data-structure/
- https://www.cs.swarthmore.edu/~newhall/unixhelp/Java_bst.pdf
For anyone who wants practice on understanding Data Structures and how they effect the time-complexity of certain operations (aka Big O), DBC has a challenge you can work through:
This can be helpful if you are anticipating going through an interview where they expect you to have this knowledge. Even if you have a job, this knowledge will be helpful in solving problems and maybe even making it to a more senior level.
Also for preparing I recommend solving different challenges. There are some links where you can find challenges: