92. Reverse Linked List II

一、题目分析

  题目要求逆转链表的第m到第n个之间的结点,因此思路是,讲m和n之间的结点单独拎出来作为一个单独的链表,进行逆转

  然后问题退化为,逆转一个单链表。

  可以采用递归的方式,每次传入上一个结点和当前结点,将当前结点指向上一个结点

  然后将当前结点和下一个结点再次调用该方法

  代码如下所示:

复制代码
class Solution {
public:
    //逆转链表,head是下部分的链表头,last是上一个节点。
    ListNode* reverseList(ListNode* head, ListNode* last)
    {
        if(head)
        {
            ListNode* next = head->next;
            head->next = last;
            return this->reverseList(next, head);
        }
        return last;
    }
    
    //逆转链表,第m->n个节点
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        
        ListNode *p = dummy;
        ListNode *pLeftPrev = NULL, *pLeft = NULL, *pRight = NULL, *pRightNext = NULL;
        for (int i = 0; i <= n && p; i++) {
            
            if(i == m - 1)
            {
                pLeftPrev = p;
                pLeft = p->next;
            }
            
            if(i == n)
            {
                pRight = p;
                pRightNext = p->next;
            }
            
            p = p->next;
        }
        
        pRight->next = NULL;
        this->reverseList(pLeft, NULL);
        
        pLeftPrev->next = pRight;
        pLeft->next = pRightNext;
        p = dummy->next;
        free(dummy);
        
        return p;
    }
};
复制代码

 

posted @   兜兜有糖的博客  阅读(147)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示