【LeetCode】876_链表的中间结点_C

题目描述

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

https://leetcode.cn/problems/middle-of-the-linked-list/description/

示例

提示:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

解题总结

  • 思路一

遍历链表得到结点数,根据结点数求中间结点所在位置,再次遍历链表

  • 思路二

设置两个指针,一个指针为“快指针”,每次前进两个结点,一个指针为“慢指针”,每次前进一个结点,当快指针指向链表尾结点时,慢指针指向链表的中间结点

代码实现

  • 思路一的代码实现
struct ListNode* middleNode(struct ListNode* head) {
int count = 0;
struct ListNode* p = head;
while (p != NULL)
{
count++;
p = p->next;
}
int mid = count / 2 + 1;
int i = 0;
p = head;
for(i = 0; i < mid - 1; i++)
{
p = p->next;
}
return p;
}
  • 思路二的代码实现
struct ListNode* middleNode(struct ListNode* head) {
struct ListNode* slow = head;
struct ListNode* fast = head;
while(fast != NULL && fast->next != NULL) //当快指针和下个结点都不为空时,循环继续
{
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
posted @   长白秋沙  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示