⭐️ 往期相关文章
💫 链接1:leetcode 206.反转链表
💫 链接2:leetcode 203.移除链表元素
💫 链接3:数据结构-手撕单链表+代码详解
⭐️ 题目描述
🌟 leetcode链接:链表的中间结点
1️⃣ 代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/*
思路:快慢指针问题
A 指针走一步
B 指针走两步
同样的距离当B指针走到结束 A指针就在中点位置
*/
struct ListNode* middleNode(struct ListNode* head){
struct ListNode* slow = head;
struct ListNode* fast = head;
// 到终点有两种情况:
// - 奇数个:fast到最后一个位置
// - 偶数个:fast到NULL
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}