Given the head of a linked list containing kdistinct elements, return the head to a linked list of lengthkcontaining the frequency of each
distinct element in the given linked list in any order.
Input: head =[1,1,2,1,2,3]Output: [3,2,1]Explanation: There are `3` distinct elements in the list. The frequency of
`1`is`3`, the frequency of `2`is`2` and the frequency of `3`is`1`.Hence, we return`3 -> 2 -> 1`.Note that `1 -> 2 -> 3`,`1 -> 3 -> 2`,`2 -> 1 -> 3`,`2 -> 3 -> 1`, and `3
-> 1 -> 2` are also valid answers.
Example 2:
1
2
3
4
Input: head =[1,1,2,2,2]Output: [2,3]Explanation: There are `2` distinct elements in the list. The frequency of
`1`is`2` and the frequency of `2`is`3`. Hence, we return`2 -> 3`.
Example 3:
1
2
3
4
Input: head =[6,5,4,3,2,1]Output: [1,1,1,1,1,1]Explanation: There are `6` distinct elements in the list. The frequency of
each of them is`1`. Hence, we return`1 -> 1 -> 1 -> 1 -> 1 -> 1`.
Constraints:
The number of nodes in the list is in the range [1, 105].
We need to count the frequency of each distinct value in the linked list. Using a hash map allows us to efficiently count occurrences as we traverse the list, then we can build a new linked list from the frequency values.
classSolution {
public ListNode frequenciesOfElements(ListNode head) {
Map<Integer, Integer> freq =new HashMap<>();
for (ListNode p = head; p !=null; p = p.next) freq.put(p.val, freq.getOrDefault(p.val, 0) + 1);
ListNode dummy =new ListNode(0), cur = dummy;
for (int f : freq.values()) {
cur.next=new ListNode(f);
cur = cur.next;
}
return dummy.next;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
classSolution {
funfrequenciesOfElements(head: ListNode?): ListNode? {
val freq = mutableMapOf<Int, Int>()
var p = head
while (p !=null) {
freq[p.`val`] = freq.getOrDefault(p.`val`, 0) + 1 p = p.next
}
val dummy = ListNode(0)
var cur = dummy
for (f in freq.values) {
cur.next = ListNode(f)
cur = cur.next!! }
return dummy.next
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution:
deffrequenciesOfElements(self, head: Optional[ListNode]) -> Optional[ListNode]:
freq: dict[int, int] = {}
p = head
while p:
freq[p.val] = freq.get(p.val, 0) +1 p = p.next
dummy = ListNode(0)
cur = dummy
for f in freq.values():
cur.next = ListNode(f)
cur = cur.next
return dummy.next