国外设计案例网站,外网网站建设,广西建设协会网站首页,网站备案机构力扣876#xff1a;链表的中间结点
题目描述#xff1a; 给你单链表的头结点 head #xff0c;请你找出并返回链表的中间结点。
如果有两个中间结点#xff0c;则返回第二个中间结点。
示例 1#xff1a;
输入#xff1a;head [1,2,3,4,5] 输出#xff1a;[3,4,5]…力扣876链表的中间结点
题目描述 给你单链表的头结点 head 请你找出并返回链表的中间结点。
如果有两个中间结点则返回第二个中间结点。
示例 1
输入head [1,2,3,4,5] 输出[3,4,5] 解释链表只有一个中间结点值为 3 。 示例 2
输入head [1,2,3,4,5,6] 输出[4,5,6] 解释该链表有两个中间结点值分别为 3 和 4 返回第二个结点。
提示
链表的结点数范围是 [1, 100] 1 Node.val 100
分析 快慢指针思想
定义两个指针快指针fast慢指针slow从头开始遍历
fast一次走两步慢指针一次走两步
遍历结束后慢指针所在的节点就是中间节点返回slow即可
那么什么时候遍历结束呢
链表为奇数个时 fast-next为空时遍历结束。
链表为偶数个时 fast为空时遍历结束。
代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* middleNode(struct ListNode* head) {struct ListNode*fasthead,*slowhead;while(fastfast-next){fastfast-next-next;slowslow-next;}return slow;
}