给定一个头结点为
head
的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
简单难度。使用快慢指针即可,快指针fast每次走2步,慢指针slow每次走1步,当fast走到末尾时slow正好走到中间,返回slow即可。
public ListNode middleNode(ListNode head) {
ListNode fast = head, slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}