【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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具