方法一
最简单想到的就是首先遍历单链表获取到链表的长度,然后计算出长度的一半是多少,然后再从头遍历,找到中间节点
缺点:
需要遍历两次链表,繁琐。
方法二
如果是双链表,可以首位并行,相遇的节点就是中间节点。类似于双链表,单链表寻找中间节点可以使用两个指针都指向头部,一个指针每一次走一步,一个指针每一次走两步,移动快速的指针走到表尾的时候,那么慢指针刚好走到中间节点。
代码:
public Node searchMid(Node head){
Node p = head;
Node q = head;
while (q != null && q.next != null && q.next.next != null){
q = q.next.next;
p = p.next;
}
return p;
}