# Middle of the Linked List

## Description

Given a non-empty, singly linked list with head node `head`, return a middle node of linked list.

If there are two middle nodes, return the second middle node.

**Example 1:**

> **Input:** \[1,2,3,4,5]&#x20;
>
> **Output:** Node 3 from this list (Serialization: \[3,4,5])&#x20;
>
> The returned node has value 3. (The judge's serialization of this node is \[3,4,5]).&#x20;
>
> Note that we returned a ListNode object ans, such that:&#x20;
>
> ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL.

**Example 2:**

> **Input:** \[1,2,3,4,5,6]&#x20;
>
> **Output:** Node 4 from this list (Serialization: \[4,5,6])&#x20;
>
> Since the list has two middle nodes with values 3 and 4, we return the second one.

**Note:**

* The number of nodes in the given list will be between `1` and `100`.

## **Code**

```java
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        while (fast.next != null && fast.next.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return fast.next == null ? slow : slow.next;
    }
}
```
