LeetCode 876. 链表的中间结点 | C语言版
LeetCode 876. 链表的中间结点
题目描述
题目地址:876. 链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
解题思路
思路一:使用快慢双指针
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* middleNode(struct ListNode* head){
//使用快慢双指针:同时从head出发,当fast快指针到达链表尾时,slow慢指针必然位于中间
struct ListNode* slow=head;
struct ListNode* fast=head;
while(fast!=NULL && fast->next!=NULL){
//慢指针走一步
slow=slow->next;
//快指针走两步
fast=fast->next->next;
}
return slow;
}
运行结果
参考文章:
思路二:减少遍历节点数
代码实现
在这里插入代码片