876. 链表的中间结点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
解决思路:
- 定义两个节点,快慢节点;
- 快节点的一次走两步,慢节点一次走一步;
- 当fast == null 或者 fast.next为空的时候就说明fast走到链表尾巴了,这个时候slow就是链表的中间节点。
这里的fast
和fast,next
的判断条件分别对应的是偶数奇数长度的链表
-
fast == null
说明是偶数长度的链表 -
fast.next == null
说明的是奇数长度的链表
public ListNode middleNode(ListNode head) {
//定义快慢节点
ListNode fast = head;
ListNode slow = head;
//如果fast == null || fast.next == null就终止循环
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
//返回slow
return slow;
}