这题考察的也是快慢指针。
我们对偶数和奇数分别进行分析:

image.png
当链表是偶数时,我们需要判断他自身是否为 null,如果为 null,说明到了末尾。
当链表是奇数时,我们需要判断他的 next 是否为 null,如果是 null,说明到了末尾。
代码如下:
class Solution {
    public ListNode middleNode(ListNode head) {
        ListNode first = head;
        ListNode second = head;
        
        while(first != null && first.next != null){
            first = first.next.next;
            second = second.next;
        }
        
        return second;
    }
}
延伸:判断一个使用链表存储的字符串是否是回文字符串
参考:https://www.jianshu.com/p/e1e546241a31