Finding middle element in a linked list
Given a singly linked list of N nodes. The task is to find the middle of the linked list. For example, if the linked list is 1-> 2->3->4->5, then the middle node of the list is 3. If there are two middle nodes(in case, when N is even), print the second middle element. For example, if the linked list given is 1->2->3->4->5->6, then the middle node of the list is 4.
Example 1:
Input: LinkedList: 1->2->3->4->5 Output: 3 Explanation: Middle of linked list is 3. Example 2:
Input: LinkedList: 2->4->6->7->5->1 Output: 7 Explanation: Middle of linked list is 7. Your Task: The task is to complete the function getMiddle() which takes a head reference as the only argument and should return the data at the middle node of the linked list.
Expected Time Complexity: O(N). Expected Auxiliary Space: O(1).
Constraints: 1 <= N <= 5000
class Solution{
public:
/* Should return data of middle node. If linked list is empty, then -1*/
int getMiddle(Node *head)
{
Node* fast = head;
Node *slow = head;
if (head != NULL){
while(fast->next != NULL && fast != NULL) //here
{
fast = fast->next->next;
slow = slow->next;
}
}
return slow->data;
}
};
// Runtime Error: Segmentation Fault (SIGSEGV)
class Solution{
public:
/* Should return data of middle node. If linked list is empty, then -1*/
int getMiddle(Node *head)
{
Node* fast = head;
Node *slow = head;
if (head != NULL){
while(fast != NULL && fast->next != NULL) //here
{
fast = fast->next->next;
slow = slow->next;
}
}
return slow->data;
}
};
// Problem Solved Successfully