题目描述:
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
题解思路:
1、如果小于等于一个节点,就直接返回head
2、如果有两个节点,就返回head.next的节点
3、准备两个节点 slow 和 fast 让他们分别指在 head.next的位置
4、如果fast.next!=null && fast.next.next !=null , 接下来就是快指针每次走两步,慢指针每次走一步 最后返回慢指针即可。
public static ListNode middleNode(ListNode head) {
if (head == null || head.next == null){
return head;
}
if (head.next.next == null){
return head.next;
}
ListNode slow = head.next;
ListNode fast = head.next;
while(fast.next!=null && fast.next.next!=null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}