数据结构之“快慢指针”

一、快慢指针

快慢指针是解决链表环问题的一个常见技巧

在这个方法中,我们设置两个指针,一个快指针(每次移动两步)和一个慢指针(每次移动一步)

二、"链表的中间结点"

1、题目:

2、解题思路:

通过快慢指针找到中间节点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置

3、代码实现:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* middleNode(struct ListNode* head) {
    struct ListNode *fast;
    struct ListNode *slow;
    fast = slow = head;
    while(fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

4、测试用例:

三、"环形链表"

1、题目:

2、解题思路:

定义快慢指针fast,slow, 如果链表确实有环,fast指针一定会在环内追上slow指针

3、代码实现:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    if(head == NULL || head->next == NULL)
    {
        return false;
    }
    struct ListNode *fast;
    struct ListNode *slow;
    fast = head->next;
    slow = head;
    while(slow != fast)
    {
        if(fast == NULL || fast->next == NULL)
        {
            return false;
        }
        slow = slow->next;
        fast = fast->next->next;
    }
    return true;
}

4、测试用例:

微语:迎着扑面而来的风,点点星光,以及街道两边那道无限往外延伸、延至天边的光

相关推荐
gugucoding2 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
ChaoZiLL3 小时前
我的数据结构3——链表(link list)
数据结构·链表
王老师青少年编程5 小时前
2026年6月GESP真题及题解(C++七级):消消乐
数据结构·c++·算法·真题·gesp·2026年6月
海清河晏1115 小时前
数据结构 | 二叉搜索树
数据结构·c++·visual studio
Yang_jie_036 小时前
笔记:数据结构(顺序表)
数据结构·windows·笔记
一个初入编程的小白10 小时前
数据结构:栈
数据结构
我命由我1234511 小时前
方差(实例实操、与标准差的区别)
java·数据结构·算法·数据分析·java-ee·intellij-idea·idea
努力努力再努力wz11 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
什巳11 小时前
JAVA练习275-乘积最大子数组
java·开发语言·数据结构·算法
码完就睡13 小时前
数据结构——串的模式匹配算法(BF算法、KMP算法)
数据结构·算法