• 链表中的节点每k个一组翻转


    描述

    将给出的链表中的节点每k个一组翻转,返回翻转后的链表

    如果链表中的节点数不是k的倍数,将最后剩下的节点保持原样 你不能更改节点中的值,只能更改节点本身。 数据范围:0≤n≤2000 ,1≤k≤2000 ,链表中每个元素都满足0≤val≤1000 要求空间复杂度O(1),时间复杂度O(n)

    例如: 给定的链表是1→2→3→4→5 对于k=2 , 你应该返回2→1→4→3→5 对于k=3 , 你应该返回3→2→1→4→5

    /**
     * struct ListNode {
     *  int val;
     *  struct ListNode *next;
     * };
     */
     
    class Solution {
    public:
        /**
         *
         * @param head ListNode类
         * @param k int整型
         * @return ListNode类
         */
        ListNode* reverseKGroup(ListNode* head, int k) {
            // write code here
            ListNode* pn=nullptr;
            ListNode* cn=head;
            ListNode* nn=nullptr;
            ListNode* newhead=nullptr;
            ListNode* left0=nullptr;
            ListNode* left1=nullptr;
            int i=0,len=0,grouplen=0;
            while(cn!=nullptr){
                len++;
                cn=cn->next;
            }
            if(len==1||k==1||k>len||head==nullptr)
                return head;
            grouplen=len-len%k;//计算翻转的长度
            i=0;
            cn=head;
            while(i<grouplen){
                if((i%k)==0 && (i/k)%2==0)
                    left0=cn;
                else if((i%k)==k-1 && (i/k)%2!=0)
                    left0->next=cn;//将上一组的最左边结点指向这一组的最右边结点,将两组拼接起来
                else if(i%k==0 && (i/k)%2!=0)
                    left1=cn;
                else if(i%k==k-1 && (i/k)%2==0 && i/k>0)
                    left1->next=cn;//将上一组的最左边结点指向这一组的最右边结点,将两组拼接起来,第一组的最右边结点跳过
                else if(i==k-1)
                    newhead=cn;
                nn=cn->next;
                cn->next=pn;
                pn=cn;
                cn=nn;
                i++;
            }
            if((i/k)%2==0)
                left1->next=cn;
            else
                left0->next=cn;
            return newhead;
        }
    };
  • 相关阅读:
    记最近的玄学东西
    AGC032F One Third
    【集训队作业2018】小Z的礼物
    Codeforces 1214 F G H 补题记录
    如何使用Spark大规模并行构建索引
    一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉
    ElasticSearch中分词器组件配置详解
    Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析
    分布式日志收集之Logstash 笔记(一)
    海量可视化日志分析平台之ELK搭建
  • 原文地址:https://www.cnblogs.com/fishegg/p/16339668.html
Copyright © 2020-2023  润新知