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.
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: