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; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架