题目连接

示例

输入:[1,2,3,4,5]
输出:此列表中的节点 3

解题思路

要找到链表的中间节点,可以定义两个指针,一个是慢指针slow,另一个是快指针fast。初始,慢指针slow和快指针fast都指向链表的头节点。然后,快指针fast每次向前移动两步,慢指针slow每次向前移动一步,当快指针fast不能继续向前移动时,慢指针slow所指的节点就是中间节点。

对于节点个数为奇数的链表来说,其中间节点只有一个;而对于节点个数为偶数的链表来说,其中间节点有两个。

动画

代码

  1. public ListNode middleNode(ListNode head){
  2. ListNode slow = head;
  3. ListNode fast = head;
  4. while (fast != null && fast.next != null) {
  5. slow = slow.next;
  6. fast= fast.next.next;
  7. }
  8. return slow;
  9. }