# Maximum occurring character in a linked list

Given a linked list of characters. The task is to find the maximum occurring character in the linked list. if there are multiple answers, return the first maximum occurring character.

Examples:

```Input  : g -> e -> e -> k -> s
Output : e

Input  : a -> a -> b -> b -> c -> c -> d -> d
Output : d
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Method 1:
Iteratively count the frequency of each character in a string and return the one which has maximum occurrence.

 `// CPP program to count the maximum ` `// occurring character in linked list ` `#include ` `using` `namespace` `std; ` ` `  `/* Link list node */` `struct` `Node { ` `  ``char` `data; ` `  ``struct` `Node *next; ` `}; ` ` `  `char` `maxChar(``struct` `Node *head) { ` `  ``struct` `Node *p = head; ` ` `  `  ``int` `max = -1; ` `  ``char` `res; ` ` `  `  ``while` `(p != NULL) { ` ` `  `    ``// counting the frequency of current element ` `    ``// p->data ` `    ``struct` `Node *q = p->next; ` `    ``int` `count = 1; ` `    ``while` `(q != NULL) { ` `      ``if` `(p->data == q->data) ` `        ``count++; ` ` `  `      ``q = q->next; ` `    ``} ` ` `  `    ``// if current counting is greater than max ` `    ``if` `(max < count) { ` `      ``res = p->data; ` `      ``max = count; ` `    ``} ` ` `  `    ``p = p->next; ` `  ``} ` ` `  `  ``return` `res; ` `} ` ` `  `/* Push a node to linked list. Note that ` `   ``this function changes the head */` `void` `push(``struct` `Node **head_ref, ``char` `new_data) { ` `  ``struct` `Node *new_node = ``new` `Node; ` `  ``new_node->data = new_data; ` `  ``new_node->next = (*head_ref); ` `  ``(*head_ref) = new_node; ` `} ` ` `  `/* Driver program to test above function*/` `int` `main() { ` `  ``/* Start with the empty list */` `  ``struct` `Node *head = NULL; ` `  ``char` `str[] = ``"skeegforskeeg"``; ` `  ``int` `i; ` ` `  `  ``// this will create a linked list of ` `  ``// character "geeksforgeeks" ` `  ``for` `(i = 0; str[i] != ``'\0'``; i++) ` `    ``push(&head, str[i]); ` ` `  `  ``cout << maxChar(head); ` ` `  `  ``return` `0; ` `} `

Output:

```e
```

Time complexityO(N*N)

Method 2: (use count array)
Create a count array and count each character frequency return the maximum occurring character.

## C++

 `// CPP program to count the maximum ` `// occurring character in linked list ` `#include ` `using` `namespace` `std; ` ` `  `/* Link list node */` `struct` `Node { ` `  ``char` `data; ` `  ``struct` `Node *next; ` `}; ` ` `  `char` `maxChar(``struct` `Node *head) { ` `  ``struct` `Node *p = head; ` `  ``int` `hash = {0}; ` ` `  `  ``// Storing element's frequencies ` `  ``// in a hash table. ` `  ``while` `(p != NULL) { ` `    ``hash[p->data]++; ` `    ``p = p->next; ` `  ``} ` ` `  `  ``p = head; ` ` `  `  ``int` `max = -1; ` `  ``char` `res; ` ` `  `  ``// calculating the first maximum element ` `  ``while` `(p != NULL) { ` `    ``if` `(max < hash[p->data]) { ` `      ``res = p->data; ` `      ``max = hash[p->data]; ` `    ``} ` `    ``p = p->next; ` `  ``} ` `  ``return` `res; ` `} ` ` `  `/* Push a node to linked list. Note that ` `   ``this function changes the head */` `void` `push(``struct` `Node **head_ref, ``char` `new_data) { ` `  ``struct` `Node *new_node = ``new` `Node; ` `  ``new_node->data = new_data; ` `  ``new_node->next = (*head_ref); ` `  ``(*head_ref) = new_node; ` `} ` ` `  `/* Driver program to test above function*/` `int` `main() { ` `  ``struct` `Node *head = NULL; ` `  ``char` `str[] = ``"skeegforskeeg"``; ` `  ``for` `(``int` `i = 0; str[i] != ``'\0'``; i++) ` `    ``push(&head, str[i]); ` `  ``cout << maxChar(head); ` `  ``return` `0; ` `} `

## Java

 `// Java program to count the maximum ` `// occurring character in linked list ` `import` `java.util.*; ` ` `  `class` `GFG  ` `{ ` ` `  `/* Link list node */` `static` `class` `Node  ` `{ ` `    ``char` `data; ` `    ``Node next; ` `}; ` ` `  `static` `Node head; ` `static` `char` `maxChar(Node head) ` `{ ` `    ``Node p = head; ` `    ``int` `[]hash = ``new` `int``[``256``]; ` `     `  `    ``// Storing element's frequencies ` `    ``// in a hash table. ` `    ``while` `(p != ``null``)  ` `    ``{ ` `        ``hash[p.data]++; ` `        ``p = p.next; ` `    ``} ` `     `  `    ``p = head; ` `     `  `    ``int` `max = -``1``; ` `    ``char` `res = ``0``; ` `     `  `    ``// calculating the first maximum element ` `    ``while` `(p != ``null``) ` `    ``{ ` `        ``if` `(max < hash[p.data]) ` `        ``{ ` `            ``res = p.data; ` `            ``max = hash[p.data]; ` `        ``} ` `        ``p = p.next; ` `    ``} ` `    ``return` `res; ` `} ` `     `  `/* Push a node to linked list. Note that ` `this function changes the head */` `static` `void` `push(Node head_ref, ``char` `new_data)  ` `{ ` `    ``Node new_node = ``new` `Node(); ` `    ``new_node.data = new_data; ` `    ``new_node.next = head_ref; ` `    ``head_ref = new_node; ` `    ``head = head_ref; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``head = ``null``; ` `    ``char` `str[] = ``"skeegforskeeg"``.toCharArray(); ` `    ``for` `(``int` `i = ``0``; i < str.length; i++)  ` `    ``{ ` `        ``push(head, str[i]); ` `    ``} ` `    ``System.out.println(maxChar(head)); ` `    ``} ` `} ` ` `  `// This code is contributed by Rajput-Ji `

## C#

 `// C# program to count the maximum ` `// occurring character in linked list ` `using` `System; ` `     `  `public` `class` `GFG  ` `{ ` `  `  `/* Link list node */` `class` `Node  ` `{ ` `    ``public` `char` `data; ` `    ``public` `Node next; ` `}; ` `  `  `static` `Node head; ` `static` `char` `maxChar(Node head) ` `{ ` `    ``Node p = head; ` `    ``int` `[]hash = ``new` `int``; ` `      `  `    ``// Storing element's frequencies ` `    ``// in a hash table. ` `    ``while` `(p != ``null``)  ` `    ``{ ` `        ``hash[p.data]++; ` `        ``p = p.next; ` `    ``} ` `      `  `    ``p = head; ` `      `  `    ``int` `max = -1; ` `    ``char` `res= ``'\x0000'``; ` `      `  `    ``// calculating the first maximum element ` `    ``while` `(p != ``null``) ` `    ``{ ` `        ``if` `(max < hash[p.data]) ` `        ``{ ` `            ``res = p.data; ` `            ``max = hash[p.data]; ` `        ``} ` `        ``p = p.next; ` `    ``} ` `    ``return` `res; ` `} ` `      `  `/* Push a node to linked list. Note that ` `this function changes the head */` `static` `void` `push(Node head_ref, ``char` `new_data)  ` `{ ` `    ``Node new_node = ``new` `Node(); ` `    ``new_node.data = new_data; ` `    ``new_node.next = head_ref; ` `    ``head_ref = new_node; ` `    ``head = head_ref; ` `} ` `  `  `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``head = ``null``; ` `    ``char` `[]str = ``"skeegforskeeg"``.ToCharArray(); ` `    ``for` `(``int` `i = 0; i < str.Length; i++)  ` `    ``{ ` `        ``push(head, str[i]); ` `    ``} ` `    ``Console.WriteLine(maxChar(head)); ` `    ``} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```e
```

Time complexityO(N)

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.