题目地址:
https://www.lintcode.com/problem/middle-of-the-linked-list/description
给定一个单链表,求其中点。如果中点有两个取靠后的那个。
可以用快慢指针,慢指针每次走一步,快指针每次走两步。代码如下:
public class Solution {
/**
* @param head: the head node
* @return: the middle node
*/
public ListNode middleNode(ListNode head) {
// write your code here.
ListNode dummy = new ListNode(0), slow = dummy, fast = dummy;
dummy.next = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return fast == null ? slow : slow.next;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。