题目:
求链表中间结点,如果链表结点数为奇数,返回中间结点;如果链表结点为偶数,返回中间两个结点中的任意一个。
分析:
首先想到的方式还是遍历一次求出节点个数,第二次遍历走一半个数得到中间结点。
灵活应用快慢指针,快指针每次走2步,慢指针每次走1步,快指针走到链表尾部时,慢指针走到中间。
实现:
public static ListNode find(ListNode head) {
if (head == null) {
return null;
}
ListNode slow = head;
ListNode fast = head;
while (fast.next != null) {
fast = fast.next;
if (fast.next != null) {
fast = fast.next;
slow = slow.next;
} else {
break;
}
}
return slow;
}