快慢指针型问题-初阶数据结构

本文通过快慢指针法讲解如何找到单链表的中间节点和倒数第k个节点。对于中间节点问题,快指针每次移动两步,慢指针移动一步,直至快指针到达末尾;倒数k节点问题,快指针先走k步,然后快慢指针同时移动,直至快指针为空。详细思路和源代码见正文。
摘要由CSDN通过智能技术生成

目录

 题目一:

思路:

源代码:

题目二:

思路:

源代码:


 题目一:

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

力扣icon-default.png?t=M85Bhttps://leetcode-cn.com/problems/middle-of-the-linked-list/description/

思路:

创建两个指针 一个快指针 一个慢指针 

快指针一次两步 慢指针一次一步 

这样遍历一次就可以实现

源代码:

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

题目二:

输入一个链表,输出该链表中倒数第k个结点。

链表中倒数第k个结点_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=M85Bhttps://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&&tqId=11167&rp=2&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking

思路:

同样创建两个指针

一个快指针 一个慢指针

快指针先走K步 (走的过程中要注意快指针可能就为空了)

之后快慢指针一起前进

直到快指针为空为止

源代码:

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) {
    // write code here
    struct ListNode* fast, * slow;
    fast = slow = pListHead;
    while (k--)
    {
        if (fast == NULL)//这里有可能解引用野指针
        {
            return NULL;
        }
        fast = fast->next;
    }
    while (fast)
    {

        fast = fast->next;
        slow = slow->next;
    }
    return slow;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值