1.题目描述
给你单链表的头结点 head
,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
2.样例描述
3.思路描述
创建两个快慢指针 slow , fast ,起始共同指向头节点,slow 每次走一步,fast 每次走两步,当 fast 为空或 fast 的下一个结点为空时,slow 即是中间节点的位置。由于 fast 每次走两步,slow 每次走一步,slow 总是落后 fast 整体一半的长度最终 slow 理应为中间结点。
4.代码展示
class Solution {
public ListNode middleNode(ListNode head) {
//快慢指针法:定义两个指针,快指针每次走两位,慢指针每次走移位,当快指针所在的位置或下一位为null时,慢指针的位置是链表的中点
ListNode fast = head;
ListNode slow = head;
//遍历链表,当当快指针所在的位置或下一位不为null时,执行循环
while(fast !=null && fast.next != null)
{
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
}