【剑指offer】查找单链表的中间节点

    xiaoxiao2025-09-18  77

    前提:

    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

    转载请注明原文地址: https://ju.6miu.com/read-1302797.html
    最新回复(0)