思路: 定义一个fast和一个slow,fast每走两步,slow就走一步, 最终返回的slow就是中间的值(链表的节点个数为奇数偶数都适用)
代码示例:
class ListNode {
public int val;
public ListNode next;
public ListNode(int val){
this.val = val;
this.next = null;
}
}
public class TestDemo1025_1 {
public ListNode head;
//给定一个头结点为 head 的非空单链表,返回链表的中间结点。
//如果有两个中间结点,则返回第二个中间结点。
public ListNode middleNode() {
ListNode fast = this.head;
ListNode slow = this.head;
while (fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}