Write a function named countDuplicateStrings
that accepts a pointer to a ListNodeString
representing the front of a linked list of strings.
Your function should return the number of duplicates in a sorted list, case-insensitively.
Your code should assume that the list's elements will be in case-insensitive sorted order, so that all duplicates will be grouped together.
For example, if a variable named front
points to the front of the following sequence of values, the call of countDuplicateStrings(front)
should return 7 because there are 2 duplicates of "apple", 1 duplicate of "bat", 1 duplicate of "car", 2 duplicates of "dog"and 1 dupe of "fox".
{"apple", "apple", "Apple", "bat", "Bat", "car", "car", "dog", "dog", "dog", "fox", "fox"}
Constraints:
Do not construct any new ListNodeString
objects in solving this problem (though you may create as many ListNode*
pointer variables as you like).
Do not use any auxiliary data structures to solve this problem (no array, vector, stack, queue, string, etc).
Your function should not modify the linked list's state; the state of the list should remain constant with respect to your function.
You should declare the function to indicate this to the caller.
Assume that you are using the ListNodeString
structure as defined below:
struct ListNodeString {
string data; // value stored in each node
ListNode* next; // pointer to next node in list (nullptr if none)
}