力扣 876. 链表的中间结点
题目描述
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
思路分析
快慢指针法
用一慢一快指针遍历整个链表,每次遍历,快指针都会比慢指针多走一步,即快指针一次走两步,慢指针一次走一步。最后返回慢指针就是对应的中间结点了。
代码语言:javascript复制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;
}