题目
给你单链表的头结点
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指针就到中点了。
解法
//给你单链表的头结点 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)