当前位置:   article > 正文

Lettcode链表OJ题分享以及讲解

lettcode

大家好,今天接着给大家带来链表的OJ题,话不多说,咱们往下看:

第一题:链表的中间结点

这题有很多种解法,但是呢,我会给大家将一种比较优的思路,且后面的OJ题也会用到这种思路。

解题思路:

  1. struct ListNode* middleNode(struct ListNode* head){
  2. if(head==NULL||head->next==NULL){
  3. return head;
  4. }
  5. struct ListNode* fast=head;
  6. struct ListNode* slow=head;
  7. while(fast&&fast->next)
  8. {
  9. fast=fast->next->next;
  10. slow=slow->next;
  11. }
  12. return slow;
  13. }

 这题可以用快慢指针的思路来解决,因为这里要我们求中间节点,并返回该节点,我们可以定义两个指针,一个fast和一个slow,让fast每次走两步,slow每次走一步,这样当fast走到NULL的时候slow就是中间节点,但是因为可能节点的个数是偶数,那中间节点就会有两个,但这里要求要返回后面的那个中间节点,先画个图个大家理解一下:

 当链表节点数为奇数的时候,我们发现,当slow为中间节点时,fast在最后一个节点

 当链表节点个数为偶数时,我们发现slow在中间节点的时候,fast已经走到NULL了

这里要注意的问题有两个:                                                                                                                   1、当head为NULL||head->next为NULL时,我们直接返回head即可,因为这时候前者没有节点,后者只有一个节点。

2、while的循环条件,我们必须写成fast&&fast->next,不可写成fast->next&&fast,因为如果写成后者,fast有可能已经走到NULL了,而f

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/644978
推荐阅读
相关标签
  

闽ICP备14008679号