文章目录
题目描述:
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点
简单分析:
这道题的思路并不难,分析题目要查找链表中间的元素,也就是说要找存在于链表中间的元素,这里
我们可以类比到追及问题,即,有两个人比赛跑步,从同起点出发,甲的速度为乙的二倍,当甲到达
重点时,乙的位置恰好在路程的一半。这样理解,这道题就迎刃而解了。
代码如下:
class Solution {
public ListNode middleNode(ListNode head) {
ListNode slow = head;
ListNode fast = head;
//这里的判断条件要注意,链表的长度可能为单数或双数
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}