0
点赞
收藏
分享

微信扫一扫

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

目录

题目来源:

代码实现:

分析过程:

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

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

总结:

题目来源:

https://leetcode-cn.com/problems/middle-of-the-linked-list/description/

题目描述:

[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_链表[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_数据结构_02

代码实现:

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;
}

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

分析过程:

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

[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_数据结构_04[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_数据结构_05

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

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

[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_数据结构_06[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_C语言_07

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

总结:

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

[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_数据结构_08[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_C语言_09

 需要注意的是:

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

[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_C语言_10[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_链表_11

[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_链表_12[ 链表OJ题] 用快慢指针解决链表中间值问题-链表的中间结点_C语言_13

(本题完) 


举报

相关推荐

0 条评论