前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】Leetcode 876. 链表的中间节点

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

作者头像
DevKevin
发布2024-03-19 15:26:54
1210
发布2024-03-19 15:26:54
举报
文章被收录于专栏:Base_CDNKevin

题目

通过题目的要求可以判断出有两种示例要解决,一种是偶数节点的链表,一种是奇数节点的链表,应对这两种情况我们需要使程序对二者都可以兼容。

解决思路

代码语言:javascript
复制
struct ListNode* middleNode(struct ListNode* head) 
{
    struct ListNode *slow = head,*fast = head;
    while(fast && fast -> next)
    {
        slow = slow -> next;
        fast = fast -> next -> next;
    }
    return slow;
}

中间节点,只要找到中间的位置就能找到中间的节点。那么这个位置要怎么去查找呢?

我们可以用快慢指针的思想来进行查找,定义一个慢指针,再定义一个是慢指针速度二倍的快指针,这样的话当快指针到最后的位置的时候慢指针指向的就是中间节点了。

但是在查找的时候还要同时解决上面提到的两种情况:

①奇数链表

从两个指针的初始开始研究,当前两个指针都处在第一个节点的位置,然后我们开始移动。

可以发现,在奇数数量节点的链表中,当fast到达最后一个节点的时候slow刚好指向了中间节点。这样就完成了查找中间节点的目的,该遍历循环的条件是fast -> next != NULL,也就是当fast的next是NULL的时候终止循环,此时的slow指向就是中间节点。

②偶数链表

同样的,我们也是从头开始循环。

因为是偶数链表,所以需要查找到的中间节点的位置是中间两个节点中的第二个,当循环后发现,当fast到达NULL的时候slow指向的才是中间的第二个节点,所以该情况的循环条件为fast != NULL。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解决思路
    • ①奇数链表
      • ②偶数链表
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档