数据结构之“快慢指针”

一、快慢指针

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

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

二、"链表的中间结点"

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、测试用例:

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

相关推荐
sugar__salt2 小时前
从栈队列数据结构到JS原型面向对象全解
前端·javascript·数据结构
froyoisle4 小时前
CSP-J 历年复赛 T1 及解析(2019~2025)
数据结构·c++·算法·csp-j·csp·算法竞赛·信息学
喜欢打篮球的普通人5 小时前
LLVM 后端流程与关键数据结构:从 IR 到机器码的入门笔记
java·数据结构·笔记
Misnearch5 小时前
1、数组/字符串
java·数据结构·算法
008爬虫实战录5 小时前
【数据结构】 树、二叉树、完全二叉树,先序遍历、中序遍历、后序遍历
数据结构·算法
AllData公司负责人5 小时前
大模型赋能AllData数据中台,系列升级|通过联合智谱大模型与BiSheng开源项目,建设企业大模型应用开发平台,支持知识库向量检索!
大数据·数据结构·数据库·算法·大模型·向量数据库·智谱ai
梦想的颜色7 小时前
MySQL 数据存储结构与查询执行生命周期深度解析
运维·数据结构·数据库·mysql·线程·优化
Ameilide7 小时前
数据结构 算法解释,排序、查找
数据结构
真实的菜8 小时前
Redis 从入门到精通(二):深入数据结构 —— 从 RedisObject 到 SkipList 的源码级拆解
数据结构·redis·skiplist
小欣加油10 小时前
leetcode41 缺失的第一个正数
数据结构·c++·算法·leetcode