前提:
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