- 
                Notifications
    
You must be signed in to change notification settings  - Fork 266
 
Reverse Watchlist
        Raymond Chen edited this page Aug 18, 2024 
        ·
        1 revision
      
    TIP102 Unit 3 Session 1 Standard (Click for link to problem statements)
Understand what the interviewer is asking for by using test cases and questions about the problem.
- Q: What is the input to the problem?
- A: The input is a list 
watchlistrepresenting a list of shows sorted by popularity. 
 - A: The input is a list 
 - Q: What is the output?
- A: The output is the 
watchlistreversed, with the least popular shows first and the most popular shows last. 
 - A: The output is the 
 - Q: How should the reversal be implemented?
- A: The reversal should be done in-place using the two-pointer technique without using list slicing.
 
 
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Use two pointers to swap elements from the beginning and the end of the list, working towards the center to reverse the list in-place.
1. Initialize two pointers: `left` at the start of the list (index 0) and `right` at the end of the list (index `len(watchlist) - 1`).
2. While the `left` pointer is less than the `right` pointer:
   1. Swap the elements at the `left` and `right` pointers.
   2. Move the `left` pointer one step to the right.
   3. Move the `right` pointer one step to the left.
3. Continue this process until the two pointers meet or cross, at which point the list will be fully reversed.
4. Return the reversed `watchlist`.- Forgetting to move the pointers after swapping, which can cause an infinite loop.
 - Accidentally creating a new list instead of reversing the original list in-place.
 - Not considering edge cases like an empty list or a list with a single element.
 
def reverse_watchlist(watchlist):
    # Initialize two pointers
    left = 0
    right = len(watchlist) - 1
    
    # Loop until the two pointers meet
    while left < right:
        # Swap the elements at the left and right pointers
        watchlist[left], watchlist[right] = watchlist[right], watchlist[left]
        # Move the pointers towards the center
        left += 1
        right -= 1
    
    return watchlist