首页 > 代码库 > 快慢指针原理--快速找到未知长度单链表的中间节点

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

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);

 

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