首页 > 编程语言 >单链表算法 - 链表的中间节点

单链表算法 - 链表的中间节点

时间:2024-07-15 20:01:29浏览次数:14  
标签:slow ListNode struct fast next 链表 单链 节点

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/middle-of-the-linked-list/description/

思路1:

 思路2:

代码:

/**
 * 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* slow = head;
    while(fast && fast->next)
    {
        //慢指针每次走一步
        slow = slow->next;
        //快指针每次走两步
        fast = fast->next->next;
    }
    //此时slow指向的节点刚好就是中间节点
    return slow;
}

提交结果:

这里输出3,4,5是因为这是链表,返回的时候返回的是3这个节点的地址,3节点的next指针指向的是4节点,以此类推直到某个节点的next指针指向空的时候就不打印。 

快慢指针的原理:

修改循环条件:

当我们把while循环中的两条表达式交换一下顺序,此时代码会有问题。

原因:

 建议不要修改while循环的顺序,这么小的细节找起来太难了。

标签:slow,ListNode,struct,fast,next,链表,单链,节点
From: https://blog.csdn.net/m0_74271757/article/details/140446236

相关文章