【C语言】Leetcode 876. 链表的中间节点

简介: 【C语言】Leetcode 876. 链表的中间节点




题目

通过题目的要求可以判断出有两种示例要解决,一种是偶数节点的链表,一种是奇数节点的链表,应对这两种情况我们需要使程序对二者都可以兼容。

解决思路

struct ListNode* middleNode(struct ListNode* head) 
{
    struct ListNode *slow = head,*fast = head;
    while(fast && fast -> next)
    {
        slow = slow -> next;
        fast = fast -> next -> next;
    }
    return slow;
}

中间节点,只要找到中间的位置就能找到中间的节点。那么这个位置要怎么去查找呢?

我们可以用快慢指针的思想来进行查找,定义一个慢指针,再定义一个是慢指针速度二倍的快指针,这样的话当快指针到最后的位置的时候慢指针指向的就是中间节点了。

但是在查找的时候还要同时解决上面提到的两种情况:

①奇数链表

从两个指针的初始开始研究,当前两个指针都处在第一个节点的位置,然后我们开始移动。

可以发现,在奇数数量节点的链表中,当fast到达最后一个节点的时候slow刚好指向了中间节点。这样就完成了查找中间节点的目的,该遍历循环的条件是fast -> next != NULL,也就是当fast的next是NULL的时候终止循环,此时的slow指向就是中间节点。

②偶数链表

同样的,我们也是从头开始循环。

因为是偶数链表,所以需要查找到的中间节点的位置是中间两个节点中的第二个,当循环后发现,当fast到达NULL的时候slow指向的才是中间的第二个节点,所以该情况的循环条件为fast != NULL。


以上便是本篇博客的全部内容,感谢您的支持~

目录
相关文章
|
15天前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
17 0
|
20天前
|
C语言
对链表使用插入排序的C语言实现示例
对链表使用插入排序的C语言实现示例
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
12天前
【力扣】21. 合并两个有序链表
【力扣】21. 合并两个有序链表
|
1月前
|
存储 C语言 索引
在C语言中静态链表
在C语言中静态链表
17 1
|
1月前
|
存储 算法 C语言
在C语言中的动态链表
在C语言中的动态链表
9 0
|
1月前
|
前端开发 C语言
c语言中的链表
c语言中的链表
9 1
|
1月前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
22 0
|
1月前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
1月前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)

热门文章

最新文章