1.leetcode原题链接:. - 力扣(LeetCode)
2.题目描述
给你单链表的头结点 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 ,返回第二个结点。
3.实现方法
使用快慢指针,遍历链表,slow 一次走一步,fast 一次走两步。那么当 fast 到达链表的末尾时,slow 就位于中间位置。
/**
* 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==null || head.next ==null){
return head;
}
//有两个及以上节点时
ListNode slow=head.next;
ListNode fast=head.next;
while(fast.next !=null && fast.next.next !=null){
slow=slow.next;
fast=fast.next.next;
}
return slow;
}
}