public static ListNode getMiddleNode(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        } else if (head.next.next == null) {
            return head.next;
        }

        ListNode slowPoint = head;
        ListNode fastPoint = head;

        while (fastPoint.next != null) {
            fastPoint = fastPoint.next;
            slowPoint = slowPoint.next;

            if (fastPoint.next != null) {
                fastPoint = fastPoint.next;
            }
        }
        return slowPoint;
    }