每日一题(链表的中间节点)

简介: 每日一题(链表的中间节点)

每日一题(链表的中间节点)


876. 链表的中间结点 - 力扣(LeetCode)


b04a2f2dbb44f2b11e8cb476cda2310f_8f8a48f27aa24392847ccd75756284cf.png


思路:


如下图:可以定义两个结构体指针均从链表的头节点开始向后遍历,fast指针一次走两步,slow指针一次走一步,fast指针的速度永远是slow指针速度的两倍。根据链表的个数的奇偶性可以将情况分为两种:


af9995728d84e88da1affd3a2591d34a_a4fbeb3f5d1449bba75742c98a656e01.png


情况一:当链表的个数为奇数个时(如下图),直到fast走到尾节点时,此时slow节点就是链表的中间节点。


image.png


情况二:当链表的个数为偶数个时(如下图),直到fast为空指针时,此时的slow节点就是链表的中间节点。


8608a1b75f92f49e4228aedbc87c3f11_f258d8288b2e4d4b8bbdad18b61b3cd9.png


注意:


  1. 只要链表的个数是奇数个,那么fast一定会走到尾节点,不会走到空指针处。
  2. 只要链表的个数是偶数个,那么fast一定会走到空指针处,不会走到尾节点。

由于我们无法知晓链表个数的奇偶性,所以当fast只要走到了尾节点或空指针处,此时的slow一定就是链表的中间节点。


代码实现:

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


完结


链表的中间节点题目的分析就到这里啦,若有不足,欢迎评论区指正,下期见!


相关文章
|
6月前
|
机器学习/深度学习 算法
24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交
1. **两两交换链表中的节点**:通过引入虚拟头结点,使所有节点都能采用统一的交换逻辑,避免对头结点单独处理。 2. **删除链表的倒数第N个节点**:利用双指针技巧,让快慢指针保持N个节点的距离,当快指针到达末尾时,慢指针正好指向待删除节点的前一个节点。 3. **链表相交**:先计算两链表长度并调整起点,确保从相同距离末尾的位置开始遍历,从而高效找到相交节点或确定无交点。 以上方法均在时间复杂度和空间复杂度上进行了优化,适合用于理解和掌握链表的基本操作及常见算法设计思路。
|
存储 Python
链表中插入节点
链表中插入节点
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
154 0
LeetCode第二十四题(两两交换链表中的节点)
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
202 0
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
180 0
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
208 5
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
207 4