876. 链表的中间结点
创始人
2025-05-31 07:06:02

文章目录

  • 题目
  • 思路1(暴力求解)
  • 思路2(快慢指针)
  • 总结

题目

在这里插入图片描述

思路1(暴力求解)

既然让我们求中间的节点,我们可以先遍历一遍求出整个链表的节点个数N,再遍历到N/2+1,当前位置就是中间节点的位置,虽然这样的时间复杂度是O(n)但是这样需要遍历两次,我们有一个更巧妙的方法

思路2(快慢指针)

我们可以i定义两个指针,fastslowfast每次走2个节点,slow每次走1个节点
如果是奇数个节点的话,当fast的下一个节点是空节点时,slow走到的当前节点就是中间节点,
如果是偶数个节点的话,当fast当前的节点是空节点时,slow走到的当前节点就是中间节点
在这里插入图片描述
代码实现

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

在这里插入图片描述

总结

快慢指针是一种常用的链表指针操作技巧,可以在链表中解决很多问题。下面是一些可以使用快慢指针的常见场景:

  1. 判断链表是否有环:快慢指针可以用来判断一个链表是否有环。将慢指针移动一步,快指针移动两步,如果存在环,两个指针最终会相遇。这个技巧被称为快慢指针法或者龟兔赛跑算法。

  2. 查找链表的中间节点:使用快慢指针可以查找链表的中间节点。将慢指针移动一步,快指针移动两步,当快指针到达链表末尾时,慢指针刚好在链表中间。

  3. 链表倒数第k个节点:使用快慢指针也可以查找链表的倒数第k个节点。将快指针移动k-1步,然后将快慢指针一起移动,当快指针到达链表末尾时,慢指针所指的节点就是倒数第k个节点。

  4. 删除链表的倒数第n个节点:可以使用快慢指针删除链表的倒数第n个节点。先将快指针移动n步,然后将快慢指针一起移动,当快指针到达链表末尾时,慢指针所指的节点就是要删除的节点。

相关内容

热门资讯

一个争论,一场突围 中国商报(记者 马嘉)在位于北京的首都医科大学宣武医院实验室,一场激烈的讨论正在进行。一边是医学研究...
年底这件事别忘了做! 2025年余额不足,估计盼望元旦假期的小伙伴“身未动,心已远”。别急,出发之前,有件事别忘了做!这就...
长安汽车和渝富集团等3家投资方... 新京报贝壳财经讯(记者王琳琳)12月24日,长安汽车发布深蓝汽车以公开挂牌方式增资扩股的进展公告。挂...
女子因使用婴儿爽身粉患癌,强生... 据央视财经报道,当地时间12月22日,美国马里兰州陪审团作出一项裁定:强生公司需向一名因使用其婴儿爽...
苹果CEO库克增持300万美元... 12月18日,Nike耐克集团公布截至11月30日的2026财年第二季度财报,集团营收同比增长1%至...