欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 【初阶数据结构题目】7.链表的中间结点

【初阶数据结构题目】7.链表的中间结点

2025/5/24 0:07:16 来源:https://blog.csdn.net/hlyd520/article/details/140860684  浏览:    关键词:【初阶数据结构题目】7.链表的中间结点

链表的中间结点

点击链接做题

思路1:

  1. 第一次循环:求链表总长度,计算中间结点的位置
  2. 第二次循环:根据中间节点的位置走到中间节点

思路2:快慢指针

先定义快慢指针fast,slow,都位于头节点

慢指针每次往后走1步,快指针每次往后走2步。

奇数个结点时:当fast->next == NULL就没有必要往后走了,此时slow也刚好指向中间节点

偶数个结点时:当fast走到NULL的时候,此时slow也刚好指向中间节点

为什么快慢指针可以找到中间节点?

慢指针每次走一步,快指针每次走两步,当快指针走到链表的尾结点时,假设链表的长度为n

快指针走的路程是慢指针的两倍,即2*慢=快

此时慢指针走的路程就是n/2

思路代码:

/*** 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, *fast = head;//慢指针每次走1步,快指针每次走2步while(fast && fast->next){//不能写while(fast->next && fast)slow = slow->next;fast = fast->next->next;}//此时slow指向的结点刚好就是中间结点return slow;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词