您的位置:首页 > 其它

单链表之查找单链表的中间结点

2015-10-19 13:08 316 查看
查找单链表的中间结点:

/**
* 此题可应用于上一题类似的思想。也是设置两个指针,只不过这里是, 定义快慢两个指针,同时从头开始遍历,快指针每次走两步,慢指针每次走一步,
* 快指针走到最后一个结点时,慢指针所指结点就是中间结点,即第(n/2+1)个结点。 注意链表为空,链表结点个数为1和2的情况。时间复杂度O(n
*/
public static Node getMiddleNode(Node head) {
if (head == null || head.next == null) {
return head;
}

Node slow = head; //
Node fast = head;

// 前面指针每次走两步,直到指向最后一个结点,后面指针每次走一步
while (fast.next != null) {
// 先走fast,再走slow,再走fast,严格顺序!!!
fast = fast.next;
slow = slow.next;
if (fast.next != null) {
fast = fast.next;
}
}
// 循环结束,fast.next == null,是最后一个节点
return slow;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: