当前位置: 首页 > news >正文

【数据结构】快指针和慢指针

一、

给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。
要求:只遍历一遍链表

可以使用快慢指针:fast 一次走两步,slow 一次走一步。当 fast == NULL(偶数个结点)或者 fast->next == NULL(奇数个结点)就停止,返回 slow。

struct ListNode* middleNode(struct ListNode* head) 
{
    struct ListNode* slow, *fast; 
    slow = fast = head; 
    while(fast && fast->next)
    {
        slow = slow->next; 
        fast = fast->next->next;
    }
    return slow;
}

注意:

1、一次性定义多个指针时,第二个及以后的指针名前面都要加 * 。

2、while( )括号内是循环继续的条件。

二、

输入一个链表,输出该链表中倒数第k个结点。
要求:只遍历一遍链表

快慢指针:fast 先走 k - 1 步,然后 fast 和 sliow 同时走,直到 fast 走到链表的最后一个结点。

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) 
{
    struct ListNode* slow, *fast; 
    slow = fast = pListHead;

    while(--k)
    {
        fast = fast->next;
    }
    while(fast->next)
    {
        slow = slow->next; 
        fast = fast->next;
    }
}

相关文章:

  • Mybatis学习总结
  • @Configuration与 @Component的差异
  • 条款23:宁以non-member、non-friend替换member函数
  • [嵌入式] 嵌入式软件开发书籍推荐及电子版分享
  • 【干货教程】Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 习题解答 | 一维差分与等差数列差分
  • sentinel小记
  • 基于大数据爬虫的旅游分析可视化平台设计和实现
  • Https解决了Http的哪些问题
  • RAG从入门到精通系列1:基础RAG
  • Python爬虫系统搭建教程,从0开始搭建爬虫系统(附安装包)
  • Spring Boot 实战篇(四):实现用户登录与注册功能
  • 第9章:LangChain结构化输出-示例3(日期和时间提取服务)
  • 缓存基础解释与缓存友好型编程基础
  • 【嵌入式Linux应用开发基础】进程间通信(6):套接字
  • 从Excel到Hadoop:数据规模的进化之路
  • ubuntu新系统使用指南
  • 大白话React第三章高级应用阶段
  • API接口设计模式:从分层架构到CQRS的实战应用
  • aardio - 虚表——列附加文本及列按钮区域例程