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

Posted 胖头猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快慢指针原理--快速找到未知长度单链表的中间节点相关的知识,希望对你有一定的参考价值。

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

 

以上是关于快慢指针原理--快速找到未知长度单链表的中间节点的主要内容,如果未能解决你的问题,请参考以下文章

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

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

快慢指针问题

2020-11-03:手写代码:链表如何快速找到中间节点?

数据结构线性表单链表试题

利用快慢指针寻找链表中间节点