单链表主类
求中间节点的思路
参考删除单链表中倒数第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;
}
这样拿到的就是前者了
本文介绍如何使用Java实现找到单链表的中间节点,通过快慢指针的方法,当快指针到达链表尾部时,慢指针恰好位于中间位置。对于偶数个节点的情况,可以选择前或后一个节点作为中间节点。
4293

被折叠的 条评论
为什么被折叠?



