0
点赞
收藏
分享

微信扫一扫

[ 链表OJ题 3] 用快慢指针解决链表中间值问题-链表的中间结点

目录

题目来源:

代码实现:

分析过程:

1、当链表元素为奇数个时:

2、当链表元素为偶数个时:

总结:


题目来源:

876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)

题目描述:

代码实现:

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

分析过程:

1、当链表元素为奇数个时:

 当链表元素为奇数个时,我们使用快慢指针,规定slow指针每次走一步,fast每次走两步,当fast->next为NULL时,slow所指向的指针就是该链表的中间元素。

2、当链表元素为偶数个时:

 因为题目要求当链表有偶数个元素时,要求返回较后的中间结点,因此我们可以观察到,当fast为NULL时,slow所指向的元素即为链表元素为偶数个元素的中间结点。

总结:

当fast指针为NULL或者fast->next为NULL时,slow指针所指向的元素即为该链表的中间元素。

 需要注意的是:

while(fast&&fast->next)括号内fast和fast->next顺序不能互换,这是因为,&&操作符在判断的时候,会有执行顺序的先后,会先执行左边的语句,再执行右边的语句,在上述分析,当链表元素为偶数个时,fast走到最后时,fast为空,如果我们将fast->next写到左边先执行的话,必将造成空指针异常

 

(本题完) 

举报

相关推荐

0 条评论