C语言每日一题(25)链表的中间结点

力扣 876. 链表的中间结点

题目描述

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

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

C语言每日一题(25)链表的中间结点_第1张图片

思路分析

快慢指针法

用一慢一快指针遍历整个链表,每次遍历,快指针都会比慢指针多走一步,即快指针一次走两步,慢指针一次走一步。最后返回慢指针就是对应的中间结点了。

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;
    
}

你可能感兴趣的:(c语言,链表,算法)