2 easiest solution - middle Node
class Solution {\n    public ListNode middleNode(ListNode head) {\n        \n        \n        // I Method - first calculating totalNodes then dividing by 2 + 1
class Solution {\n    public ListNode middleNode(ListNode head) {\n        \n        \n        // I Method - first calculating totalNodes then dividing by 2 + 1th node is the answer\n        \n         int totalNodes = 0;\n         \n         ListNode traverse = head;\n         while(traverse != null){           //O(N)\n             \n             traverse = traverse.next;\n             totalNodes++;\n         }\n         \n         int middle = (totalNodes/2) + 1;\n         \n         middle = middle - 1;   //because traversing from head therefore 1st node already visisted\n         traverse = head;\n         \n         while(middle != 0){                //O(N/2)\n             traverse = traverse.next;\n             middle--;\n         }\n         \n         return traverse;\n        \n        \n        // II Method - slow and fast pointer\n        \n        ListNode slow = head;\n        ListNode fast = head;\n         \n         while( fast != null && fast.next != null){             //O(N/2)\n             \n             fast = fast.next.next;\n                \n             slow = slow.next;\n         }\n         return slow;\n    }\n}
['Linked List', 'C', 'Java']