【数据结构】链表的中间节点

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。
在这里插入图片描述
在这里插入图片描述

Definition for singly-linked list.
 struct ListNode {
      int val;
      struct ListNode *next;
 };

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

这个题和快慢指针有些相似。创建临时变量slow和fast都表示头节点。
当slow走到下一个节点的时候,fast走到了下一个节点的下一个节点。也就是fast走两个slow走一个。

当链表为奇数个时,fast到最后一个节点的时候slow刚好到中间节点。当链表为偶数个时,slow走到两个中间节点第二个节点的时候,fast则应该是到了链表最后一个节点的下一个节点。所以我们while循环的判断条件是fast不为空且fast的next指针指向的位置不为空。
最后返回中间节点。

相关推荐

  1. 数据结构基础(带头节点双向循环

    2024-04-27 07:10:05       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-27 07:10:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-27 07:10:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-27 07:10:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-27 07:10:05       18 阅读

热门阅读

  1. k8s部署jenkins

    2024-04-27 07:10:05       12 阅读
  2. Go语言 Interface(接口)

    2024-04-27 07:10:05       11 阅读
  3. 视频截屏(视频转图片)

    2024-04-27 07:10:05       16 阅读
  4. 深度学习比较有用的网站

    2024-04-27 07:10:05       18 阅读
  5. Cocos Creator 3D物理引擎的物体编辑详解

    2024-04-27 07:10:05       13 阅读
  6. k8s部署alertmanager

    2024-04-27 07:10:05       14 阅读
  7. AI助手对决:ChatGPT vs 文心一言

    2024-04-27 07:10:05       15 阅读
  8. spark错误集锦

    2024-04-27 07:10:05       12 阅读
  9. 设计模式入门(三)单例模式

    2024-04-27 07:10:05       9 阅读