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