【力扣】链表的中间结点

876. 链表的中间结点 - 力扣(LeetCode)

题目:

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

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

思路:

通过快慢指针实现这题

快指针一次走两个结点,慢指针一次走1个结点,当快指针走到最后一个结点时,慢指针恰巧在中间结点

【力扣】链表的中间结点_第1张图片

 代码:

struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* fast = head;
    struct ListNode* slow = head;
    while (fast && fast->next != NULL)
    //fast可能为NULL,所以把fast->next!=NULL的判断放在后面,以免对空指针操作
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

你可能感兴趣的:(链表,leetcode,数据结构)