zoukankan      html  css  js  c++  java
  • <leetcode c++>25. K 个一组翻转链表

    25. K 个一组翻转链表

    给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

    k 是一个正整数,它的值小于或等于链表的长度。

    如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

    建议先做 206. 反转链表 和 92. 反转链表 II 

    我的思路是先求出链表长度,然后每次反转k个

    class Solution {
    public:
        ListNode* successor = NULL;  //保存nk+1开始的链表
        ListNode* re(ListNode* h){
            if(!h||!h->next)return h;
            ListNode* Node=re(h->next);
            h->next->next=h;
            h->next=successor;
            return Node;
        }                //逆序一个链表
        ListNode* reverseKGroup(ListNode* head, int k) {
            if(!head||!head->next||k==1)return head;
            int len=0;
            ListNode* p=head;
            while(p){
                len++;
                p=p->next;
            }
            p=head;
            ListNode *pre=new ListNode(0);
            pre->next=head;head=pre;
            for(int i=0;i<len/k;i++){
                ListNode* tmp=pre->next;
                for(int j=0;j<k-1;j++){
                    p=p->next;
                }
                successor=p->next;
                p->next=NULL;
                pre->next=re(pre->next);
                pre=tmp;
                p=successor;
            }
            return head->next;
        }
    };
  • 相关阅读:
    Linux dd命令
    冲突域
    三次握手与四次挥手
    sizeof +数组名
    程序内存分配
    OSI七层协议模型
    栈的存储结构
    周转时间
    Gson工具类
    spring注入注解
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12900114.html
Copyright © 2011-2022 走看看