链表的中间节点

这题需要用到快慢指针的思想,快指针叫fast,慢指针是slow,快指针每次往后移两个节点,slow只移动一个节点,这样子fast的速度是slow的两遍,当fast遍历完链表,slow才遍历一半,正好就在中间。

代码:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
 typedef struct ListNode LSTNode;
struct ListNode* middleNode(struct ListNode* head) {
    LSTNode* slow,*fast;//定义两个指针
    fast=slow=head;//初始化指针
    while(fast&&fast->next)//fast走的快,它不能为空,并且它的next也不行
    {
        slow=slow->next;//slow每次往后移动一个节点
        fast=fast->next->next;//fast每次往后移动两个节点
    }
    return slow;//返回slow
}
相关推荐
opple6614 分钟前
力扣-数据结构-二叉树
数据结构·算法·leetcode
import_random37 分钟前
[社交网络]布局算法(可视化)
算法
时光话1 小时前
Lua 第14部分 数据结构
开发语言·数据结构·lua
地平线开发者1 小时前
C++ 部署的性能优化方法
c++·算法·自动驾驶
我学上瘾了1 小时前
链表反转_leedcodeP206
网络·redis·链表
怀念无所不能的你1 小时前
acwing背包问题求方案数
学习·算法·动态规划·dp
Yingye Zhu(HPXXZYY)1 小时前
洛谷P12238 [蓝桥杯 2023 国 Java A] 单词分类
c++·算法·蓝桥杯
Phoebe鑫2 小时前
数据结构每日一题day13(链表)★★★★★
数据结构·链表
Seven972 小时前
缓存穿透的解决方式?—布隆过滤器
java·数据结构·redis