给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。
示例 2:
输入:head = [1,2,3,4,5,6] 输出:[4,5,6]
解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。提示:
链表的结点数范围是 [1, 100] 1 <= Node.val <= 100
思路:
创建两个快慢指针,快的指针node1走的始终是慢指针node2的二倍,一起遍历,直到快指针到最后一个结点结束
循环结束的条件:
node1.next.next要想继续的话,首先node1不为空,node1.next也不空
class Solution {
public ListNode middleNode(ListNode head) {
ListNode node1=head;
ListNode node2=head;
while(node1!=null&&node1.next!=null){
node1=node1.next.next;
node2=node2.next;
}
return node2;
}
}