栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【c++】【leetcode92】翻转链表Ⅱ(O(n))

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【c++】【leetcode92】翻转链表Ⅱ(O(n))

反转链表Ⅱ

解题思路
  • 定义两个新结点,root指向原本链表的头,he指向从left位置开始的结点。
  • 定义back,end,p指针,back指向left位置前一个结点,end指向right位置的结点,p指向right位置后一个结点。
  • 中间位置进行反转链表,区域位置保持不变,如下如所示(back->next = he->next)
  • end一开始指向left位置的结点,最后仍然指向该结点,只是这个结点被反转到最开始right的位置
代码
class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        ListNode* he = new ListNode;//指向原本的链表
        ListNode* root = new ListNode;
        root->next = head;
        ListNode* back = root;
        for(int i = 1;i < left;++i){
            back = back->next;//back在left前一位
        }
        ListNode* end = back->next;//end指向left
        ListNode* p = end;//p指向最后剩下的
        ListNode* q = end;
        for(int i = left;i <= right;++i){
            q = p->next;
            p->next = he->next;
            he->next = p;
            p = q;
        }
        back->next = he->next;
        end->next = p;
        return root->next;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号