欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-08 16:48:52
...

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

上一篇:

下一篇: