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