链表的中间结点数据结构oj题(力扣876)

目录

题目描述:

题目分析:

代码解决:


题目描述:

给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。

题目分析:

寻找中间节点这道题原理就是通过1/2总长度,对于我来说一开始想到的方法一 就是先计算内部有多少个节点,然后进行除以二,得到中间节点数后,进行遍历到对应的中间节点(本人有点笨,只能想到这种方法了)。通过向大佬学习,我发现一个更加好用的方法,思路二 就是快慢指针,这个快慢指针就是一个fast指针每次走两步,另一个low指针每次走一步,等fast出界时,low就是中间指针,这个方法是个好方法思路简单,代码也好写,就是难想出来哈哈哈。

代码解决:

思路一:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {
    ListNode* n1, * n2;
    n1 = n2 = head;
    int count = 0;
    //遍历计算链表长度
    while (n1)
    {
        n1 = n1->next;
        count++;
    }
    //移动到中间链表
   count = count / 2;
   while (count)
   {
       n2 = n2->next;
       count--;
   }
    return n2;
}

思路二:

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {
    ListNode* fast = head;
    ListNode* low = head;
    while (fast != NULL && fast->next != NULL)
    {
        fast = fast->next->next;
        low = low->next;
    }
    return low;
}
相关推荐
Darling噜啦啦5 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠6 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾6 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8216 天前
算法复键——树状数组
数据结构·算法
想吃火锅10056 天前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
牛油果子哥q6 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒6 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
疯狂成瘾者6 天前
Java 集合 LinkedList 详解:链表结构、常用方法和队列使用
java·开发语言·链表
退休倒计时6 天前
【每日一题】LeetCode 146. LRU 缓存 TypeScript
算法·leetcode·缓存·typescript
WL学习笔记6 天前
单项不带头不循环链表
数据结构·链表