快慢指针原理--快速找到未知长度单链表的中间节点

阅读更多

package com.java.dataStruct;

 

//节点类

public class Node {

    

    E item;

    Node next;

    public Node(){

    }

    public Node(E element){

        this.item = element;

    }

    public Node(E element, Node next){

        this.item = element;

        this.next = next;

    }

    

 

}

 

        Node p1,r1;

        

        Node L1 = new Node("head");

        r1 = L1;

        

        // 先利用尾插法创建一个链表

        for(int i=1; i<=20; i++){

            p1 = new Node();

            p1.item = "value"+i;

            

            r1.next = p1;

            r1 = p1;

        }

        r1.next = null;

        

        

//        while(L1.next != null){

//            //System.out.p1r1intln(L.item);

//            System.out.println(L1.next.item);

//            L1 = L1.next;

//        }

  

        

        /*

         * 快速找到未知长度单链表的中间节点

         * 

         * 快慢指针原理

         * 设置两个指针 search,mid都指向单链表的头节点。

         * 其中search的移动速度是mid的2倍。

         * 当search指向末尾节点的时候,mid正好就在中间了。

         */

        Node search,mid;

        search = L1;

        mid = L1;

        for(;search.next != null;){

            if(search.next.next != null){

                search = search.next.next;

                mid = mid.next;

            }else{

                search = search.next;

            }

        }

        System.out.println("结果: "+mid.item);

你可能感兴趣的:(快慢指针原理--快速找到未知长度单链表的中间节点)