. - 力扣(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循环的顺序,这么小的细节找起来太难了。