问题描述
给定一个头结点为 head 的非空单链表,返回链表的中
间结点。如果有两个中间结点,则返回第二个中间结点。
问题解析
这里用快慢指针法,快指针每次往后走两步,慢指针每次
往后走一步。
奇数时:
偶数时:
代码
class Solution {
public ListNode middleNode(ListNode head) {
//如果链表为空,则返回null
if (head==null){
return null;
}
ListNode fast=head;//快指针
ListNode slow =head;//慢指针
//通过快指针判断循环的条件
while (fast.next!=null && fast.next.next!=null){
fast=fast.next.next;//快指针,每次往后走两步
slow=slow.next;//慢指针,每次往后走一步
}
//奇数个节点时,返回slow
if (fast.next==null){
return slow;
}else{
return slow.next;//偶数个节点时返回slow.next
}
}
}