链表的中间结点数据结构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;
}
相关推荐
杰克尼20 分钟前
1. 两数之和 (leetcode)
数据结构·算法·leetcode
YuTaoShao1 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
JoJo_Way6 小时前
LeetCode三数之和-js题解
javascript·算法·leetcode
凌肖战8 小时前
力扣网C语言编程题:在数组中查找目标值位置之二分查找法
c语言·算法·leetcode
学不动CV了9 小时前
数据结构---线性表理解(一)
数据结构
ysa05103010 小时前
数论基础知识和模板
数据结构·c++·笔记·算法
GEEK零零七10 小时前
Leetcode 1103. 分糖果 II
数学·算法·leetcode·等差数列
今天背单词了吗98010 小时前
算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·数据结构·笔记·算法
气质、小青年!10 小时前
【排序算法】
c语言·数据结构
重庆小透明11 小时前
力扣刷题记录【1】146.LRU缓存
java·后端·学习·算法·leetcode·缓存