单链表主类
求中间节点的思路
参考删除单链表中倒数第n个节点(JAVA)中,如果有size
字段,中间节点的求法就是
size/2
(如果有两个中间节点,取前边)
size/2 + 1
(如果有两个中间节点,取后边)
接着就是移动到相应位置即可
参考单链表中环的检测(JAVA)中,快慢指针的思路,二倍速的快指针走到头的时候,一倍速的慢指针就正好在中间节点了,如果有两个中间节点,取前还是后,再调(XD)
代码
public SinglyLinkedNode<T> getMiddle() {
if (this.getHeader() == null) {
return null;
}
SinglyLinkedNode<T> faster, lower;
faster = lower = this.getHeader();
while (faster != null && faster.getNext() != null) {
faster = faster.getNext().getNext();
lower = lower.getNext();
}
return lower;
}
找个偶数个数的链表试下,拿到的是后者
调整下代码
public SinglyLinkedNode<T> getMiddle() {
if (this.getHeader() == null) {
return null;
}
SinglyLinkedNode<T> faster, lower;
faster = this.getHeader().getNext();
lower = this.getHeader();
while (faster != null && faster.getNext() != null) {
faster = faster.getNext().getNext();
lower = lower.getNext();
}
return lower;
}
这样拿到的就是前者了