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

简介: 力扣题目——链表的中间结点

1. 题目描述

5bc3fb46c15c6421fbfd143b4790fff9.png

2. 思路分析

快慢指针法

通过快慢指针找到中间结点,快指针每次走两步,慢指针每次走一步,当快指针走到结尾的时候,慢指针正好走到中间位置

我们这里用slow表示慢指针,fast表示快指针。一开始让slow和fast都指向头结点head。

如果单链表有奇数个结点,当fast->next=NULL时,slow所指向的就是中间结点:
0f51e4d49f8f23af0a0f847b031ca125.png

如果单链表有偶数个结点,当fast==NULL时,slow所指向的就是中间结点:
578a2d12d1e282540a2730c4f333a83f.png

3. 代码实现

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


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;
}

image.png

相关文章
|
3天前
|
算法
LeetCode第19题删除链表的倒数第 N 个结点
该文章介绍了 LeetCode 第 19 题删除链表的倒数第 N 个结点的解法,通过使用快慢双指针,先将快指针移动 n 步,然后快慢指针一起遍历,直到快指针到达链尾,从而找到倒数第 N 个结点的前一个结点进行删除,同时总结了快慢指针可减少链表遍历次数的特点。
LeetCode第19题删除链表的倒数第 N 个结点
|
4天前
|
存储 C语言
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
【数据结构】c语言链表的创建插入、删除、查询、元素翻倍
|
11天前
【数据结构】双向带头(哨兵位)循环链表 —详细讲解(赋源码)
【数据结构】双向带头(哨兵位)循环链表 —详细讲解(赋源码)
21 4
|
1月前
|
存储 索引
【数据结构OJ题】设计循环队列
力扣题目——设计循环队列
23 1
【数据结构OJ题】设计循环队列
|
1月前
【数据结构OJ题】有效的括号
力扣题目——有效的括号
25 1
【数据结构OJ题】有效的括号
|
3天前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
4 0
|
3天前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
4 0
|
3天前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
4 0
|
3天前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
4 0
|
5天前
【刷题记录】链表的中间结点
【刷题记录】链表的中间结点