【C语言】876.链表的中间节点【LeetCode】

简介: 只要 fast 活着 fast 的next 为NULL 就停止

大家好,欢迎来阅读子豪的博客(LeetCode刷题篇)


大家有什么宝贵的意见或建议可以在留言区留言


如果你喜欢我的博客,欢迎 素质三连 点赞 关注 收藏


我的码云仓库:补集王子 (YZH_skr) - Gitee.com


876. 链表的中间结点


https://leetcode-cn.com/problems/middle-of-the-linked/submissions/


e16f95a030ed433ba50203fe9d565645.png


思路一:


遍历两遍


先遍历一遍 记录链表长度 然后取半 再从前往后找中间值


思路二:


快慢指针


c433b19ca95d41cdae7e42c24562fd38.png


执行方式


慢指针一次走一步 快指针一次走两步


15febc88f8fd44a4b7f73c3414ec348f.png


判断条件


只要 fast 活着 fast 的next 为NULL 就停止


结果


1.奇数:


有中间确定的中间结点


fc1df9a5937f44e69cbb4fd962b0d450.png


2.偶数:


没有中间确定的中间结点


题中说如果是偶数返回第二个中间结点


b79fbdf84b5f4b1eb73f77956b126094.png


代码:


struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode* fast,*slow;
slow = fast = head;
    while(fast&&fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}


做这类题还是得多画图呀!

相关文章
|
6天前
LeetCode链表hard 有思路?但写不出来?
LeetCode链表hard 有思路?但写不出来?
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
|
6天前
|
索引
每日一题:力扣328. 奇偶链表
每日一题:力扣328. 奇偶链表
14 4
|
6天前
leetcode代码记录(完全二叉树的节点个数
leetcode代码记录(完全二叉树的节点个数
9 1
|
6天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
11 0
|
6天前
|
存储 算法 C语言
C语言刷题~Leetcode与牛客网简单题
C语言刷题~Leetcode与牛客网简单题
|
6天前
|
存储 Java
高效删除链表倒数节点最优实现
要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——反转链表
【每日一题】LeetCode——链表的中间结点
【每日一题】LeetCode——链表的中间结点
|
6天前
|
C语言
链表的插入、删除和查询—C语言
链表的插入、删除和查询—C语言