当前位置:   article > 正文

leetcode 206题 反转链表(迭代法和头插法) C语言实现 最强解析_c语言反转链表迭代法

c语言反转链表迭代法

好!!先来看题:
在这里插入图片描述
在这里插入图片描述
这里我们用两种方法来做这道题
方法一:迭代法
方法二:头插法
我认为两种方法的基本实现原理差不多,但是还是都说一下为好

1.迭代法:
首先,我要强调一个东西,对于链表来说,在对其执行命令时,第一步就是考虑链表的情况,比如说:链表为,链表为1个结点,链表为1个以上个结点。在不同的情况下,这3种情况可能合并为两种 或者 一种情况;

就题目分析:
在这里插入图片描述
(目前不会操作画图软件,哈哈)
X,Y,Z即n1,n2,n3
知道上面这些后,然后知道迭代就行了

struct ListNode* reverseList(struct ListNode* head){
    if(head==NULL||head->next==NULL)//链表为空 或者 一个结点
    {
        return head;
    }
    else//一个以上个结点
    {
        struct ListNode*n1=NULL,*n2=head,*n3=head->next;
        while(n2!=NULL)
        {
            //反转
            n2->next=n1;//最重要的一步,其他各步都是围绕“完成这一步并且不影响下一次操作”而进行;

            //迭代
            n1=n2;
            n2=n3;
            if(n2!=NULL)
              n3=n3->next;
        }
        return n1;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

代码中while(n2!=NULL)的解释:
在这里插入图片描述

2.头插法:
首先,我要强调一个东西,对于链表来说,在对其执行命令时,第一步就是考虑链表的情况,比如说:链表为,链表为1个结点,链表为1个以上个结点。在不同的情况下,这3种情况可能合并为两种 或者 一种情况;(哈哈,复制的上面的,知道这个的重要性了吧)

知道这个然后仿照前面迭代法中的分析总结出问题中的情况


struct ListNode* reverseList(struct ListNode* head){
    struct ListNode* newhead=NULL;
    struct ListNode* cur=head;
    while(cur!=NULL)
    {
        struct ListNode* next=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

思路:
在这里插入图片描述
(刚开始写,极显不成熟)

完!!

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

闽ICP备14008679号