题目描述:
给定一个头结点为 head 的非空单链表,返回链表的中间结点.
如果有两个中间结点,则返回第二个中间结点;
测试用例:
输入:[1,2,3,4,5]
输出:3
输入:[1,2,3,4,5,6]
输出:4
思路:
-定义一个fast和一个slow节点都指向头结点;
- fast每次走两步,slow每次走一步;
-如果是奇数,只要满足fast.next != null,就一直进行第二步操作;
- 如果是偶数,只要满足fast != null,就一直进行第二步操作;
代码如下:
class ListNode{
public int val;
public ListNode next;
public ListNode(int val) {
this.val = val;
this.next = null;
}
}
public class Solution {
public ListNode middleNode(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}