. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。
https://leetcode.cn/problems/middle-of-the-linked-list/description/
思路1:

思路2:

代码:
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {//快慢指针ListNode* fast = head;ListNode* slow = head;while(fast && fast->next){//慢指针每次走一步slow = slow->next;//快指针每次走两步fast = fast->next->next;}//此时slow指向的节点刚好就是中间节点return slow;
}
提交结果:

这里输出3,4,5是因为这是链表,返回的时候返回的是3这个节点的地址,3节点的next指针指向的是4节点,以此类推直到某个节点的next指针指向空的时候就不打印。
快慢指针的原理:

修改循环条件:

当我们把while循环中的两条表达式交换一下顺序,此时代码会有问题。

原因:
建议不要修改while循环的顺序,这么小的细节找起来太难了。