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

package com.java.dataStruct;

//节点类
public class Node<E> {
    
    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<String>("head");
        r1 = L1;
        
        // 先利用尾插法创建一个链表
        for(int i=1; i<=20; i++){
            p1 = new Node<String>();
            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);

 

posted on 2016-11-28 22:17  wzyy  阅读(932)  评论(1编辑  收藏  举报