前提:
Node定义和链表的定义,参见文章Java 单链表操作
【解题思路】:
定义两个指针,pBefore)(每次跳两步)和pBehind (每次跳一步),当pBefore到达终点时候,pBehind所指的即是中间节点
public Node findMidNode(Node head){
Node pBefore=head;
Node pBehind=head;
if(pBefore==null||pBefore.next==null)
return pBefore;
while(pBefore.next!=null){
if(pBefore.next.next==null)
return pBehind;
else{
pBefore=pBefore.next.next;
pBehind=pBehind.next;
}
}
return pBehind;
}
测试代码
MyLinkList linklist2=new MyLinkList();
linklist2.add(6, 14);
linklist2.print(linklist2.head);
//linklist.print(linklist.head);
Node midNode=linklist2.findMidNode(linklist2.head);
//Node midNode=linklist.findMidNode(linklist.head);
//Node midNode=linklist2.findMidNode(null);
System.out.println("the midNode in the linklist is : "+(midNode==null?midNode:midNode.value));
运行结果
the elements in the list :
5 7 12 11 10
the midNode in the linklist is :12