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

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

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


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


完结


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


相关文章
|
27天前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
14 0
LeetCode第二十四题(两两交换链表中的节点)
|
27天前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
37 0
Leetcode第十九题(删除链表的倒数第N个节点)
|
6月前
|
存储 Python
链表中插入节点
链表中插入节点
|
20天前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
37 0
|
3月前
|
算法
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
05_删除链表的倒数第N个节点
05_删除链表的倒数第N个节点
04_两两交换链表中的节点
04_两两交换链表中的节点
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
49 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
40 4
|
4月前
|
安全 云计算
云计算自旋锁问题之在线程安全地删除链表节点时,需要频繁加锁会影响性能如何解决
云计算自旋锁问题之在线程安全地删除链表节点时,需要频繁加锁会影响性能如何解决
49 2