• 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;
        }
    }
    

  • 相关阅读:
    chrome浏览器(block)屏蔽http文件下载,如何解除?
    node项目无法编译
    Google的60款开源项目
    王兴:真正的高手,都在苦练基本功
    Flink SQL 写 hudi
    Python3 bytes函数
    Python中Base64编码与解码
    Python 类的__setitem__(),__getitem()__,__delitem__()方法
    Python queue(队列)
    Ubuntu20.04设置远程桌面连接
  • 原文地址:https://www.cnblogs.com/bokers/p/15601547.html
Copyright © 2020-2023  润新知