通过定义两个节点,遍历速度设置为 Fast/Slow=2;
这样待Fast遍历结束时,Slow刚好为单链表的终点;
循环条件来源:当链表节点为奇数,Fast在最后一个节点时,Slow为中点,这时Fast.next为null;当链表节点为偶数时,Fast是会空指针,即Fast !=null为终止循环条件;两种条件必须同时满足。
public Node MidNode() {
Node cur = this.head;
Node cur2 = this.head;
while (cur2 != null && cur2.next != null) {
cur = cur.next;
cur2 = cur2.next.next;
}
return cur;
}