个人技术分享

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

链表的中间节点是一个简单的链表OJ。我们要返回中间节点有两种情况:节点数为奇数和节点数是偶数。如果是奇数则直接返回中间节点,如果是偶数则返回第二个中间节点。

这道题的解题思路是:快慢指针

我们定义两个指针fast和slow来遍历链表,fast一次走两步,slow一次走一步,当fast走到了NULL或者fast->next为NULL时,此时slow对应的节点就是中间节点。

 

借助图来清晰快慢指针的过程,我们接下来实现代码:

typedef struct ListNode ListNode;//对结构体重命名
struct ListNode* middleNode(struct ListNode* head) 
{
    ListNode* fast = head;
    ListNode* slow = head;
    while(fast && fast->next)
    {
        fast = fast->next->next;
        slow = slow->next;
    }
    return slow;
}