zoukankan      html  css  js  c++  java
  • letcodeK个一组翻转链表(栈思想 + 递归)

    题目:输入一个有序链表,每K个一组进行反转。

    • 输入:1, 2, 3, 4, 5, 5, 6, 8, 10

    • K = 3

    • 输出:3, 2, 1, 5, 5, 4, 10, 8, 6

    题解

    反转,那么最先想到的应该是栈;但是,java.util包里的栈是不可能用的,反正只是简单的记录,那么我们建立一个
    长度为:K 的数组就可以了。

    1. 每次递归,根据传入的头节点,K次线性访问并保存数组:
    2. 不足K次,说明不够一次反转,提前退出
    3. 读到K个后逆序读取数组,反转链表
    4. 第K + 1 个节点执行下一次递归。

    不考虑递归消耗的内存,这里的空间复杂度应该是一个常数,即用来替代栈的数组。

    CODE

    class Solution {
        public ListNode reverseKGroup(ListNode head, int k) {
            ListNode[] nodeStack = new ListNode[k];
            return deepReverseKGroup(head, nodeStack, k);
        }
        /**
         * 每k个递归一次,数组模拟栈
         * */
        private ListNode deepReverseKGroup(ListNode head,ListNode[] nodeStack, int k){
            ListNode retNode = head,temp2;
            int nodeIndex = 0;
            while (head != null && nodeIndex < k){
                nodeStack[nodeIndex++] = head;
                head = head.next;
            }
            if (nodeIndex == k){
                for(int i = k - 1; i > 0; --i){
                    nodeStack[i].next = nodeStack[i-1];
                }
                retNode = nodeStack[k -1];
                temp2 = nodeStack[0];
                temp2.next = deepReverseKGroup(head, nodeStack, k);
            }
            return retNode;
        }
    }
    

  • 相关阅读:
    Mac OS X开发学习 -打开文件选择器并获取文件
    Mac OS X开发学习
    第三方开源
    Xcode操作
    Mac操作
    XCode6.1 错误
    ios 本地推送
    IOS 语法
    IOS 其他
    IOS 语法
  • 原文地址:https://www.cnblogs.com/bokers/p/15601547.html
Copyright © 2011-2022 走看看