Got One! - codepath/compsci_guides GitHub Wiki

TIP102 Unit 5 Session 1 Advanced (Click for link to problem statements)

Problem Highlights

  • 💡 Difficulty: Easy
  • Time to complete: 10 mins
  • 🛠️ Topics: Linked List, Conditional Statements

1: U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

  • Established a set (2-3) of test cases to verify their own solution later.
  • Established a set (1-2) of edge cases to verify their solution handles complexities.
  • Have fully understood the problem and have no clarifying questions.

Initial list: "Carp" -> "Dace" -> "Cherry Salmon" After catching "Carp": "Dace" -> "Cherry Salmon" When the list is empty: "Aw! Better luck next time!" and returns None

Assume N represents the number of nodes in the linked list.

  • What should the function do if the linked list is empty?
    • Print "Aw! Better luck next time!" and return None.
  • What should the function do if the linked list is not empty?
    • Print the name of the fish in the head node in the format "I caught a !" and return the new head of the list.
HAPPY CASE
Input: A linked list with nodes "Carp" -> "Dace" -> "Cherry Salmon"
Output: 
"I caught a Carp!"
New list: "Dace" -> "Cherry Salmon"
Explanation: The first fish "Carp" is caught and removed from the list.

EDGE CASE
Input: An empty list
Output: 
"Aw! Better luck next time!"
New list: None
Explanation: There are no fish to catch, so the function returns None.

2: M-atch

Match what this problem looks like to known categories of problems, e.g. Linked List or Dynamic Programming, and strategies or patterns in those categories.

For Linked List problems, we want to consider the following approaches:

  • Handling edge cases (empty list)
  • Traversing and modifying pointers

3: P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: We need to handle two cases: when the list is empty and when the list is not empty. If the list is empty, print the appropriate message and return None. If the list is not empty, print the name of the fish in the head node and update the head to the next node.

1) Check if the head is `None`.
    a) If it is, print "Aw! Better luck next time!" and return `None`.
2) If the head is not `None`:
    a) Print "I caught a <fish name>!" where <fish name> is the value of the head node.
    b) Return the next node as the new head of the list.

⚠️ Common Mistakes

  • Forgetting to handle the case where the linked list is empty.
  • Not updating the head to the next node properly.

4: I-mplement

Implement the code to solve the algorithm.

class Node:
    def __init__(self, fish_name, next=None):
        self.fish_name = fish_name
        self.next = next

# For testing
def print_linked_list(head):
    current = head
    while current:
        print(current.fish_name, end=" -> " if current.next else "\n")
        current = current.next

def catch_fish(head):
    if head is None:
        print("Aw! Better luck next time!")
        return None
    else:
        print(f"I caught a {head.fish_name}!")
        return head.next

# Example Usage:
fish_list = Node("Carp", Node("Dace", Node("Cherry Salmon")))
print_linked_list(fish_list)           # Output: "Carp -> Dace -> Cherry Salmon"
new_head = catch_fish(fish_list)       # Output: "I caught a Carp!"
print_linked_list(new_head)            # Output: "Dace -> Cherry Salmon"

empty_list = None
new_head = catch_fish(empty_list)      # Output: "Aw! Better luck next time!"
print(new_head)                        # Output: None

5: R-eview

Review the code by running specific example(s) and recording values (watchlist) of your code's variables along the way.

  • Initial list: "Carp" -> "Dace" -> "Cherry Salmon"
  • After catching "Carp": "Dace" -> "Cherry Salmon"
  • When the list is empty: "Aw! Better luck next time!" and returns None

6: E-valuate

Evaluate the performance of your algorithm and state any strong/weak or future potential work.

Assume N represents the number of nodes in the linked list.

  • Time Complexity: O(1) because the operation is done in constant time.
  • Space Complexity: O(1) because we are using a fixed amount of additional space.
⚠️ **GitHub.com Fallback** ⚠️