题目描述:
给定一个头节点为head的非空单链表,返回链表的中间节点。如果有两个中间节点,则返回第二个中间节点。
示例描述:
个人理解:
该题的核心思想:使用双指针。fast速度是slow的2倍,那么fast走完的时候,slow必然是在中间位置。(fast!=null(偶数项最后)&&fast.next!=null(奇数项最后),只要这两个条件同时满足,那么fast肯定就没有走到最后,只要有一个为null,那么就肯定走到最后了,那么slow所指的位置就是中间位置。)
题解实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
//该题的核心思想:使用双指针。fast速度是slow的2倍,那么fast走完的时候,slow必然是在中间位置。(fast!=null(偶数项最后)&&fast.next!=null(奇数项最后),只要这两个条件同时满足,那么fast肯定就没有走到最后,只要有一个为null,那么就肯定走到最后了。)
class Solution {
public ListNode middleNode(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast!=null && fast.next!=null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}