此题为力扣链表题目:
📌 文章目录:
题目:
1️⃣.题目解析
题目所需:得到链表的中间结点,如果结点个数为单数,得到的是中间的结点,如果结点的个数为双数得到的是两个中间结点靠后的那个结点,此题运用到快慢指针的思想,快指针每次走两步,慢指针每次走一步,就可以得到中间结点
2️⃣.代码实现
步骤一、先判断链表是不是空,如果为空,无法进行操作,直接返回 null
if (head == null){
return null;
}
步骤二、定义两个结点类型变量,都指向头结点,用于遍历链表
ListNode fast = head ;
ListNode slow = head;
步骤三、利用循环使快慢指针去移动,因为 fast 每次走两步,所以以 fast 的位置作为循环的条件,首先是 fast 不可以为空,由于fast 每次走两步,所以fast.next 不可以为空,循环条件 && 两边的条件不可以换位置,因为只有先fast 不为空,fast.next 才可以进行判断是不是空
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
步骤四、返回 slow 即链表的中间结点
return slow;
3️⃣.全部代码
class Solution {
public ListNode middleNode(ListNode head) {
if (head == null){
return null;
}
ListNode fast = head ;
ListNode slow = head;
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}