单链表算法 - 链表的中间节点

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://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循环的顺序,这么小的细节找起来太难了。

相关推荐

  1. 删除重复节点

    2024-07-16 03:46:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 03:46:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 03:46:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 03:46:01       58 阅读
  4. Python语言-面向对象

    2024-07-16 03:46:01       69 阅读

热门阅读

  1. 玩转springboot之SpringBoot使用jsp

    2024-07-16 03:46:01       20 阅读
  2. 神经网络调参技巧(入门案例教程)

    2024-07-16 03:46:01       20 阅读
  3. 双缓存机制

    2024-07-16 03:46:01       16 阅读
  4. CNN -1 神经网络-概述

    2024-07-16 03:46:01       19 阅读
  5. 输入两个整数,输出最大公约数与最小公倍数。

    2024-07-16 03:46:01       18 阅读