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

本文详细介绍了两种链表翻转的方法:迭代法和头插法。迭代法通过不断反转节点的指向来实现链表翻转,头插法则是在遍历链表过程中将每个节点插入到新的链表头部。两种方法均首先考虑了链表为空或只有一个节点的情况。代码示例清晰展示了每种方法的实现细节,帮助读者理解链表操作的核心思想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

代码中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;
}

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

完!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值