Full explanation || With Images || "First Middle" Case also explained
Assume that you and your friend are in a race.\nYou are running at speed = (X) m/s\nYour friend is running at speed = (2X) m/s [TWICE AS FAST AS YOU]\n\nWhen yo
Assume that you and your friend are in a race.\nYou are running at speed = (X) m/s\nYour friend is running at speed = (2X) m/s **[TWICE AS FAST AS YOU]**\n\nWhen your friend reaches finish line in time (t)\nDist(friend) = D = (2Xt)\nDist(you) = (D/2) = (Xt)\n\n**So by the time your friend reaches the finish line, You would be exactly at the "MIDDLE" of the track\nApply the Same analogy here in Linked List :)**\n\n\n\n#### FOR FINDING SECOND MIDDLE FOR EVEN LINKED LIST =>\n![image](https://assets.leetcode.com/users/images/ea4758b8-ffc1-47e8-bc12-343a666ba1b4_1670204003.6040723.jpeg)\n\n```\nclass Solution {\npublic:\n    ListNode* middleNode(ListNode* head) \n    {\n        ListNode* fast = head;\n        ListNode* slow = head;\n        while(fast != NULL && fast->next != NULL)\n        {\n            fast = fast->next->next;\n            slow = slow->next;\n        }\n        return slow;\n        \n    }\n};\n```\n\n//===================================================================================================\n#### FOR FINDING FIRST MIDDLE FOR EVEN LINKED LIST =>\n![image](https://assets.leetcode.com/users/images/c2b89e7d-bfc5-4226-918e-c64c3ea45419_1670204132.0648594.jpeg)\n```\nclass Solution {\npublic:\n    ListNode* middleNode(ListNode* head) \n    {\n        ListNode* fast = head;\n        ListNode* slow = head;\n        while(fast->next != NULL && fast->next->next != NULL) //ONLY THE CONDITIONS WOULD CHANGE\n        {\n            fast = fast->next->next;\n            slow = slow->next;\n        }\n        return slow; \n    }\n};\n```
['Linked List', 'C', 'C++']