Challenge - 5 Problems
Linked List Merge Sort Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of Merge Sort on a Linked List
What is the printed state of the linked list after applying merge sort on the following list?
Initial list: 4 -> 2 -> 1 -> 3 -> null
Initial list: 4 -> 2 -> 1 -> 3 -> null
DSA C
struct Node {
int data;
struct Node* next;
};
// Assume mergeSort and helper functions are correctly implemented
// After mergeSort is called on the head of the list
// The list is printed using printList function
// Initial list: 4 -> 2 -> 1 -> 3 -> null
// After mergeSort, what is the output?Attempts:
2 left
💡 Hint
Merge sort splits the list and merges sorted halves.
✗ Incorrect
Merge sort on linked list sorts nodes in ascending order by splitting and merging sorted halves.
🧠 Conceptual
intermediate1:30remaining
Why Use Merge Sort for Linked Lists?
Why is merge sort preferred over quicksort for sorting a linked list?
Attempts:
2 left
💡 Hint
Think about how linked lists store data and how merge sort accesses elements.
✗ Incorrect
Merge sort works well with linked lists because it only requires sequential access, unlike quicksort which needs random access.
🔧 Debug
advanced2:30remaining
Identify the Bug in Merge Sort Implementation
What error will this code cause when sorting a linked list using merge sort?
Code snippet:
struct Node* mergeSort(struct Node* head) { if (head == NULL || head->next == NULL) { return head; } struct Node* middle = getMiddle(head); struct Node* nextOfMiddle = middle->next; middle->next = NULL; struct Node* left = mergeSort(head); struct Node* right = mergeSort(nextOfMiddle); struct Node* sortedList = sortedMerge(left, right); return sortedList; } // getMiddle returns the middle node of the list // sortedMerge merges two sorted lists
Code snippet:
struct Node* mergeSort(struct Node* head) { if (head == NULL || head->next == NULL) { return head; } struct Node* middle = getMiddle(head); struct Node* nextOfMiddle = middle->next; middle->next = NULL; struct Node* left = mergeSort(head); struct Node* right = mergeSort(nextOfMiddle); struct Node* sortedList = sortedMerge(left, right); return sortedList; } // getMiddle returns the middle node of the list // sortedMerge merges two sorted lists
Attempts:
2 left
💡 Hint
Check how getMiddle is implemented and what happens if middle is NULL.
✗ Incorrect
If getMiddle returns NULL or incorrect node, accessing middle->next causes segmentation fault.
📝 Syntax
advanced1:30remaining
Correct the Syntax Error in Merge Function
Which option correctly fixes the syntax error in this merge function snippet?
Code snippet:
struct Node* sortedMerge(struct Node* a, struct Node* b) { struct Node* result = NULL; if (a == NULL) return b else if (b == NULL) return a; if (a->data <= b->data) { result = a; result->next = sortedMerge(a->next, b); } else { result = b; result->next = sortedMerge(a, b->next); } return result; }
Code snippet:
struct Node* sortedMerge(struct Node* a, struct Node* b) { struct Node* result = NULL; if (a == NULL) return b else if (b == NULL) return a; if (a->data <= b->data) { result = a; result->next = sortedMerge(a->next, b); } else { result = b; result->next = sortedMerge(a, b->next); } return result; }
Attempts:
2 left
💡 Hint
Check missing punctuation after return statements.
✗ Incorrect
The line 'return b' is missing a semicolon, causing a syntax error.
🚀 Application
expert1:00remaining
Time Complexity of Merge Sort on Linked List
What is the time complexity of merge sort when sorting a linked list with n nodes?
Attempts:
2 left
💡 Hint
Consider how merge sort divides and merges the list.
✗ Incorrect
Merge sort divides the list into halves log n times and merges n nodes each time, resulting in O(n log n).
