《手撕链表题系列-3》找到链表的中间结点

简介: 本系列主要讲解链表的经典题注:划重点!!必考~

前言


本系列主要讲解链表的经典题

注:划重点!!必考~


找到链表的中间结点


力扣链接:876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)

  • 题目描述:



给定一个头结点为 head 的非空单链表,返回链表的中间结点

如果有两个中间结点,则返回第二个中间结点


  • 示例:


22.png

  • 提示:


  • 给定链表的结点数介于 1100 之间
  • 解题思路:


  • 一般的思路:

一个个遍历,得到链表长度,在遍历链表长度的二分之一,就能得到中间结点


  • 高效思路:
  1. 使用两个指针
  2. 一个慢指针每次走一个结点的位置
  3. 一个快指针每次走慢指针的两倍长度
  4. 当快指针走完链表时,而慢指针则恰在链表中间结点位置

注意:链表长度有奇数和偶数两种情况

注:这里我们来实现高效思路


图示:


23.png


  • 参考代码:
1.

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* middleNode(struct ListNode* head){
    //创建快慢指针,快指针走两步,而慢指针走一步(当快指针到尾时,慢指针在中间)
    struct ListNode*slow,*fast;
    slow=fast=head;
    //节点为单数时,快指针走到尾节点(fast下一个节点为NULL则停止)
    //节点为双数时,快指针走到尾节点的下一个节点NULL(fast为NULL则停止)
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}


  • 结果:

24.png


每日k题无烦恼,点赞学习不得了~

相关文章
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
67 1
|
21天前
|
存储 算法 搜索推荐
链表的中间结点
【10月更文挑战第24天】链表的中间结点是链表操作中的一个重要概念,通过快慢指针法等方法可以高效地找到它。中间结点在数据分割、平衡检测、算法应用等方面都有着重要的意义。在实际编程中,理解和掌握寻找中间结点的方法对于解决链表相关问题具有重要价值。
12 1
|
2月前
链表的中间结点
链表的中间结点
178 57
|
5月前
|
算法
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
48 0
|
1月前
【LeetCode 09】19 删除链表的倒数第 N 个结点
【LeetCode 09】19 删除链表的倒数第 N 个结点
17 0
|
3月前
|
算法
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
4月前
【数据结构OJ题】链表中倒数第k个结点
牛客题目——链表中倒数第k个结点
37 1
【数据结构OJ题】链表中倒数第k个结点
|
3月前
【刷题记录】链表的中间结点
【刷题记录】链表的中间结点
|
4月前
【数据结构OJ题】链表的中间结点
力扣题目——链表的中间结点
26 0
【数据结构OJ题】链表的中间结点
|
5月前
|
算法
19.删除链表的倒数第N个结点
19.删除链表的倒数第N个结点