单链表的中间结点

单链表的中间结点,首先需要判断链表的长度,当链表的长度少于3时,则返回null,其次定义两个指针,让一个指针firstNode走两步,另一个指针secondNode走一步,当firstNode指针走到链表的尾部时,返回secondNode指针。

实现过程如下所示:

package cn.edu.nwu.structs.linklist;
/**
 * @author jcm
 *
 *时间 2016年8月23日
 */
public class GetLinkListMiddleNode {
	/**
	 * @author jcm
	 * @param head 头指针
	 * @return 返回中间结点
	 */
	public static Node getLinkListMiddleNode(Node head){
		//如果是空链表或者一个结点,两个结点,则没有中间结点,直接返回null
		if(head == null || head.next == null || head.next.next == null){
			return null;
		}
		Node firstNode = head;
		Node secondNode = head;
		//要找中间结点,遵循一个原则,第一个结点每次走两步,第二个结点走一步
		//直到第一个结点走到链表的最后一个结点,则第二个结点就是链表的中间结点
		while(firstNode.next != null){
			firstNode = firstNode.next;
			secondNode = secondNode.next;
			if(firstNode.next != null){
				firstNode = firstNode.next;
			}
		}
		return secondNode;
	}
}






你可能感兴趣的:(剑指Offer笔试面试题,单链表,数据结构,单链表,java)