一.前言
今天我在LeetCode刷到了一道单链表题,想着和大家分享一下这道题:https://leetcode.cn/problems/middle-of-the-linked-list。废话不多说让我们开始今天的知识分享吧。
二.正文
1.1题目描述
1.2题目分析
这道题有一个非常简便的方法——快慢指针法。
意思就是定义一个慢指针slow(slow一次只能移动一个节点),和一个快指针fast(fast一次能移动两个节点)。
初始让slow和fast都指向头节点。然后让它们依次移动,直到不符合条件,跳出循环。最后返回slow指针。
在上面我们可以看出快慢指针法不仅适用于节点是奇数的情况,还适用于奇数是偶数的情况。
1.3代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head)
{
ListNode* slow;
ListNode* fast;
fast=slow=head;
while((fast!=NULL)&&(fast->next!=NULL))
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
}
注意:以上的代码是在LeetCode环境下运行的。
三.结言
今天的题目分享到这就结束了,帅哥美女们,咱们下期再见。