1、题目描述
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
提示
- 给定链表的结点数介于 1 和 100 之间。
2、思路
链表问题常见两种思路
- 1、多引用(双指针、三指针)常用于链表的插入删除
- 2、快慢指针(两个引用,一个一次走一步,一个一次走多步)
定义两个指针 fast 和 low
low一次走一步
fast一次走两步
当fast == null 或者 fast.next==null 时 low 为中间节点
3、代码
public ListNode middleNode(ListNode head) {
ListNode fast=head;
ListNode low=head;
// fast==null(偶数)fast.next==null(奇数)
while(fast!=null && (fast.next!=null)){
low=low.next;
fast=fast.next.next;
}
return low;
}