个人主页:白日依山璟
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
输入:head = [1,2,3,4,5]
输出:[3,4,5]
解释:链表只有一个中间节点,值为3
输入:head = [1,2,3,4,5,6]
输出:[4,5,6]
解释:链表只有两个中间节点,值分别为3和4,返回第二个节点。
[1,100]
1<= Node.val <= 100
next
是否为空,如果是直接返回头结点slow
和fast
,都指向头结点。fast
指向fast
的next
的next
(每次移动两步);slow
指向slow
的next
(每次移动1步)fast == null
循环结束(链表元素个数为偶数时),fast.next == null
循环结束(链表元素个数为奇数时)。/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode middleNode(ListNode head) {
if (head.next == null) {
return head;
}
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
运行结果: