package jxau.lyx.sort;
/**
*
* @author: liyixiang
* @data:2014-10-1
* @题目大意:
* 查找单链表的中间结点
* @主要思路:
* 此题可应用于上一题类似的思想。也是设置两个指针,只不过这里是,
* 两个指针同时向前走,前面的指针每次走两步,后面的指针每次走一步,
* 前面的指针走到最后一个结点时,后面的指针所指结点就是中间结点,
* 即第(n/2+1)个结点。注意链表为空,链表结点个数为1和2的情况。
* @时间复杂度:
* 时间复杂度O(n)
* @空间复杂度:
*/
public class GetMiddleNode {
//结点
private static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}
public Node getMiddleNode(Node head){
if(head == null || head.next == null){
return head;
}
Node q = head;
Node p = head;
//前面指针每次走两步,直到指向最后一个结点,后面指针每次走一步
while(q.next!=null){
q = q.next;
p = p.next;
if(q.next!=null){
q = q.next;
}
}
return p;
}
}
转载于:https://my.oschina.net/liyixiangBlog/blog/323867