ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

链表内指定区间反转

2022-06-03 01:00:24  阅读:142  来源: 互联网

标签:结点 ListNode cur int 反转 nullptr 指定 链表


描述 将一个节点数为size链表m位置到n位置之间的区间反转,要求时间复杂度O(n),空间复杂度O(1)。 例如: 给出的链表为1→2→3→4→5→NULL, m=2,n=4, 返回1→4→3→2→5→NULL. 数据范围: 链表长度0<size≤1000,0<m≤n≤size,链表中每个节点的值满足∣val∣≤1000 要求:时间复杂度O(n) ,空间复杂度O(n) 进阶:时间复杂度O(n),空间复杂度O(1)

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
 
class Solution {
public:
    /**
     *
     * @param head ListNode类
     * @param m int整型
     * @param n int整型
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        ListNode* pre=nullptr;
        ListNode* cur=head;
        ListNode* nex=nullptr;
        ListNode* nn=nullptr;
        ListNode* nnexn=nullptr;
        ListNode* mpren=nullptr;
        ListNode* mn=nullptr;//保存m前、m、n、n后结点,方便反转后拼接到原来的链表
        int i=1;
        while(cur!=nullptr){
            if(i==m-1){
                mpren=cur;
            }
            if(i==m){
                mn=cur;
            }
            if(i==n){
                nn=cur;
                nnexn=cur->next;
            }
            cur=cur->next;
            i++;
        }
        pre=nnexn;//将反转区间的第1个结点指向n后结点
        cur=head;
        i=1;
        while(cur!=nullptr){
            nex=cur->next;
            if(i>=m&&i<=n){
                cur->next=pre;
                pre=cur;
            }
            cur=nex;
            i++;
        }
        if(m>1){
            mpren->next=nn;//当m不是1的时候将m前结点指向n结点
        }
        if(m==1)
            return nn;//当m是1的时候返回n结点
        return head;
    }
};

标签:结点,ListNode,cur,int,反转,nullptr,指定,链表
来源: https://www.cnblogs.com/fishegg/p/16339431.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有