目录
- 问题描述
- 示例
- 提示
- 具体思路
- 思路一
- 代码实现
问题描述
给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
题目链接:链表的中间结点
示例
提示
链表的结点数范围是 [1, 100]
1 <= Node.val <= 100
具体思路
思路一
使用快慢指针。定义个slow的慢指针,每次往后面走一个,定义一个fast的快指针,每次往后面走两个。当奇数个数据的时候,fast的next走到空就停止,当偶数个数据的时候,fast走到空就停止。
代码实现
//思路1
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* middleNode(struct ListNode* head) {
struct ListNode* slow = head;
struct ListNode* fast = head;
while(fast && fast->next)
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}