【力扣笔记】92.反转链表(区间)

本文介绍了如何解决LeetCode上的第92题——反转链表的区间。分别讲解了递归解法和迭代解法,详细阐述了递归解法中的区间反转递归和前n个元素反转递归,以及迭代解法中的单轮遍历解决方案。

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

1 递归解法

1.1 代码展示

先看看代码尝试自行理解

	ListNode* succ=NULL;//记录后继,要放在reverseN外面。
	//递归 反转链表前n个元素
    ListNode* reverseN(ListNode* head,int n){
   
   
        if(n==1){
   
   
            succ=head->next;
            return head;
        }
        ListNode* last=reverseN(head->next,n-1);
        head->next->next=head;
        head->next=succ;
        return last;
    }
    //区间反转递归
	ListNode* reverseBetween(ListNode* head, int left, int right) {
   
   
        //解法1:递归
        if(left==1){
   
   
            return reverseN(head,right);
        }
        head->next=reverseBetween(head->next,left-1,right-1);
        return head;  }  

浅浅解释一下

1.2 区间反转递归

假设链表为[1,2,3,4,5,6]六个节点,我们需要反转区间[2,4]

ListNode* reverseBetween(ListNode* head, int left, int right)

往深一层递归后

reverseBetween(head->next, left-1, right-1)

结果如下:
在这里插入图片描述
此时需要做的,就是让1指向4,再返回1;
即:
head->next=reverseBetween(head->next, left-1, right-1);
return head;

这也就是区间递归的一般情况

再往深一层递归,不难发现left=1,问题已经脱离了一般情况,变成了反转链表前n个元素。

1.3 前n个元素反转递归

假设[2,3,4,5,6]五个节点,需要反转前3个元素

ListNode* reverseN
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值