3 - Two Pointers Algorithm
228. Middle of Linked List
https://www.lintcode.com/problem/middle-of-linked-list/description?_from=ladder&&fromId=1
快慢指针,快指针每次走两步,慢指针每次一步。快指针到尾的时候,慢指针就是中点,时间复杂度为O(n / 2)
/** * Definition for ListNode * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { /** * @param head: the head of linked list. * @return: a middle node of the linked list */ public ListNode middleNode(ListNode head) { // write your code here if(head == null || head.next == null) return head; ListNode slow = head, fast = head.next; while(fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } return slow; } }