链表的中间结点数据结构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;
}
相关推荐
ID_180079054731 小时前
小红书笔记详情API接口基础解析:数据结构与调用方式
数据结构·数据库·笔记
千金裘换酒6 小时前
LeetCode 移动零元素 快慢指针
算法·leetcode·职场和发展
iuu_star7 小时前
C语言数据结构-顺序查找、折半查找
c语言·数据结构·算法
漫随流水8 小时前
leetcode算法(515.在每个树行中找最大值)
数据结构·算法·leetcode·二叉树
千金裘换酒10 小时前
LeetCode反转链表
算法·leetcode·链表
圣保罗的大教堂11 小时前
leetcode 1161. 最大层内元素和 中等
leetcode
闲看云起12 小时前
LeetCode-day6:接雨水
算法·leetcode·职场和发展
黛色正浓12 小时前
leetCode-热题100-贪心合集(JavaScript)
javascript·算法·leetcode
一起努力啊~13 小时前
算法刷题--长度最小的子数组
开发语言·数据结构·算法·leetcode
小北方城市网13 小时前
第1课:架构设计核心认知|从0建立架构思维(架构系列入门课)
大数据·网络·数据结构·python·架构·数据库架构