`

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

    博客分类:
  • java
阅读更多

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

分享到:
评论

相关推荐

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

    快速找到未知长度单链表的中间节点 普通的方法很简单,首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。

    线形表---链表---带头节点单链表的就地逆置

    用c语言描述的线形表---链表---带头节点单链表的就地逆置

    链表-使用C语言实现带头结点的单链表.zip

    删除节点通常需要找到前一个节点,然后更新其`next`指针: ```c // 删除指定值的节点 void deleteNode(Node** head, int key) { Node* temp = *head; Node* prev; if (temp != NULL && temp-&gt;data == key) { *...

    快慢指针证明带环单链表

    ### 快慢指针证明带环单链表 在计算机科学中,单链表是一种常见的数据结构,由一系列节点组成,每个节点包含一个数据元素和...在解决其他与链表相关的复杂问题时,快慢指针的思想也非常有用,比如找到环的入口节点等。

    数据结构-3期(KC002) 单链表的建立运算.docx

    单链表是一种线性数据结构,其中每个元素(称为节点)包含一个数据部分和一个指向下一个节点的指针。 首先,我们来看如何创建一个单链表。在提供的代码中,`CreatList`函数用于生成单链表。它从用户那里接收输入,...

    数据结构-3期(KC002) 单链表的删除运算.docx

    1. **单链表**:单链表是一种基本的数据结构,其中每个节点包含一个数据元素和一个指向下一个节点的指针。在C语言中,可以使用结构体来表示节点。 2. **结构体定义**:`ListNode` 结构体包含了两个成员,`data` ...

    hashtable-C语言版(折叠法+单链表)

    单链表允许我们在每个桶中维护一个节点列表,每个节点包含关键字及其相关数据,以及指向下一个冲突节点的指针。这种结构使得我们可以遍历链表来找到或插入正确的元素,虽然这会增加查找的时间复杂度至O(n),但在...

    数据结构-单链表的操作--带头节点

    数据结构-----单链表的操作------带头节点

    面试题快慢链表和快慢指针

    快慢链表和快慢指针是一种常见的数据结构和算法设计模式,广泛应用于各种面试题中,例如腾讯的一道面试题:如何快速找到位置长度单链表的中间节点?本文将详细介绍快慢链表和快慢指针的原理、实现和应用。 快慢链表...

    单链表的按值查找_shujujiegou_

    单链表是由一系列节点组成的,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域则存储指向下一个节点的引用。链表的最后一个节点的指针域为NULL,表示链表的结束。 在单链表中进行按值查找的...

    单链表中重复元素的删除

    单链表是一种链式存储结构,它由多个节点组成,每个节点包含一个值和一个指向下一个节点的指针。单链表的节点可以是静态的,也可以是动态的。 在这个问题中,我们需要首先按照输入的逆位序建立一个单链表。这个过程...

    快慢指针法判断单链表有环

    在Java中,判断单链表是否有环的经典方法是使用Floyd的“龟兔赛跑”算法,也称为快慢指针法。这种方法利用两个指针,一个每次走一步(称为慢指针),另一个每次走两步(称为快指针)。如果链表中存在环,那么快指针...

    C++ 实现带头节点的单链表

    ### C++实现带头节点的单链表 #### 概述 本篇文章主要介绍如何使用C++来实现一个带有头节点的单链表。单链表是一种基本的数据结构,在计算机科学中有着广泛的应用,例如用于存储有序的数据集合或作为其他更复杂...

    删除单链表的倒数第n个节点.cpp

    要删除单链表的倒数第n个节点,我们首先需要遍历链表,找到倒数第n+1个节点,然后将该节点的next指针指向倒数第n个节点的next,从而完成删除操作。这里的关键在于如何有效地找到目标节点,而不必遍历整个链表两次。...

    数据结构---线性表之单链表(C语言)

    它是一种线性的、非连续的数据组织形式,每个元素称为节点,每个节点包含数据和一个指向下一个节点的指针。本篇文章将深入探讨单链表的创建、插入和删除操作。 一、单链表的创建 在C语言中,首先需要定义一个结构体...

    环形链表 II(python 快慢指针)1

    环形链表是一种特殊的链表,其中最后一个节点的`next`指针不是指向`None`,而是指向链表中的另一个节点,形成了一个环状结构。本题的目标是找到链表中环的入口节点,如果没有环,则返回`None`。这个问题通常使用快慢...

    无头节点的单链表

    无头节点单链表的实现可是说是对C语言指针一个最直接、最贴合实际、也是最具有归纳性的程序设计应用。许多C语言基础面试题都涉及单链表的实现和构造,其目的就是考察面试者对C语言基础数据类型是否有足够的了解,对...

    不带头节点的单链表倒置算法

    在数据结构的学习中,单链表是一种基础且重要的数据结构,它由一系列节点组成,每个节点包含数据元素和指向下一个节点的指针。本题目要求实现一个不带头节点的单链表倒置的算法,这是一个典型的链表操作问题,旨在...

    单链表之头部插入节点.pdf

    单链表是一种基础的数据结构,常用于存储线性序列数据,其每个节点包含数据和一个指向下一个节点的指针。在单链表中,头部插入节点是常见的操作之一,尤其在面试和笔试中常被用来考察对数据结构的理解和编程能力。 ...

Global site tag (gtag.js) - Google Analytics