题目
链表的中间节点
给定一个头结点为 head 的非空单链表,返回链表的中间结点 如果有两个中间结点,则返回第二个中间结点
示例 1:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
思路
利用快慢指针的思想,慢指针前进一步,快指针前进两步。注意:需要判断临界条件,可以在本子上画画。
public ListNode middleNode(ListNode head) {
ListNode p = head; //慢指针
ListNode q = head; //快指针
while (q != null && q.next != null){
p = p.next;
q = q.next.next;
}
return p;
}