文章目录
题目
给你单链表的头结点
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
Related Topics
链表
双指针
👍 977
👎 0
思路
- 快慢指针
- slow指针和fast指针都指向head头节点,每当slow前进一步,fast指针就前进两步,当fast指针到链表末尾的时候,slow指针就到中点了。
解法
java
//给你单链表的头结点 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
//
//
// Related Topics 链表 双指针 👍 977 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
/**
* 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) {
//快慢指针初始化指向头节点
ListNode fast=head,slow=head;
//慢指针走一步,快指针走两步
while (fast!=null&&fast.next!=null){
//慢指针走一步,快指针走两步
slow=slow.next;
fast=fast.next.next;
}
//慢指针指向中点
return slow;
}
}
//leetcode submit region end(Prohibit modification and deletion)