LeetCode 876. 链表的中间结点 | C语言版

LeetCode 876. 链表的中间结点 | C语言版

    • LeetCode 876. 链表的中间结点
      • 题目描述
      • 解题思路
        • 思路一:使用快慢双指针
          • 代码实现
          • 运行结果
          • 参考文章:
        • 思路二:减少遍历节点数
          • 代码实现
          • 运行结果
          • 参考文章:[]()

LeetCode 876. 链表的中间结点

题目描述

题目地址:876. 链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。
LeetCode 876. 链表的中间结点 | C语言版_第1张图片

解题思路

思路一:使用快慢双指针

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


struct ListNode* middleNode(struct ListNode* head){
    //使用快慢双指针:同时从head出发,当fast快指针到达链表尾时,slow慢指针必然位于中间
    struct ListNode* slow=head;
    struct ListNode* fast=head;

    while(fast!=NULL && fast->next!=NULL){
        //慢指针走一步
        slow=slow->next;
        //快指针走两步
        fast=fast->next->next;
    }
    return slow;

}
运行结果

LeetCode 876. 链表的中间结点 | C语言版_第2张图片

参考文章:

https://leetcode.cn/problems/middle-of-the-linked-list/solutions/164351/lian-biao-de-zhong-jian-jie-dian-by-leetcode-solut/?orderBy=hot

思路二:减少遍历节点数

代码实现
在这里插入代码片
运行结果
参考文章:

在这里插入图片描述

你可能感兴趣的:(算法,链表,leetcode,c语言)