• js刷题:leecode 25


    原题:https://leetcode.com/problems/reverse-nodes-in-k-group/

    题意就是给你一个有序链表。如1->2->3->4->5,还有一个输入K,让你以k为长度单位一段一段的翻转链表,如果长度不够k的部分则不翻转。

    比如k=2,就两个两个翻转2->1->4->3->5,剩下5不够两个就不翻转,所以k=3的结果为3->2->1->4->5

    解题思路:将链表按k分成N段,先探测是否满足k个,若满足则先将这一段翻转,翻转之后各段需要连接,所以要记录上一段的尾部。

    遇到的问题:出现mle的错误,最后发现是在每一段翻转链表时应该将head节点指向空(因为翻转之后就变成了尾巴),如果不指向空则会形成一个环。

    代码

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} head
     * @param {number} k
     * @return {ListNode}
     */
        var reverseKGroup = function(head, k) {
        if(head===null||head.next===null){
            return head ;
        }
        if(k<=1){
            return head ;
        }
        var current_node ;
        var current_next ;
        var iterator_node = head ;
        var group_head ;
        var pre_group_tail = head ;
        var no_k_element = false ;
        var fst = true ;
        var ans = head ;
        while(iterator_node!==null&&!no_k_element){
            current_node = iterator_node ;
            current_next = iterator_node.next ;
            if(!fst){
                pre_group_tail.next = iterator_node ;
            }
            //test is there k nodes left,and iterator_node mv k steps to position k+1
            for(var i=0;i<k;i++){
                if(iterator_node.next===null&&i!=(k-1)){
                    no_k_element = true ;
                    break ;
                }
                iterator_node  = iterator_node.next ;
            }
            if(!no_k_element){
                current_node.next = null ;
                group_head = current_node ;
                var temp_group_node ;
                for(var j=0;j<k-1;j++){
                    temp_group_node = current_next.next ;
                    current_next.next = current_node ;
                    current_node = current_next ;
                    current_next = temp_group_node ;
                }
                if(!fst){
                    pre_group_tail.next = current_node;
                    pre_group_tail = group_head ;
                }else{
                    fst = false ;
                    ans = current_node ;
                }
            }
        }
        return ans ;
        };
  • 相关阅读:
    用PHP编写Hadoop的MapReduce程序
    zookeeper原理
    实现输出h264直播流的rtmp服务器 flash直播服务器
    HTTP Live Streaming直播(iOS直播)技术分析与实现
    谷歌技术"三宝"之BigTable
    谷歌技术"三宝"之谷歌文件系统
    谷歌技术"三宝"之MapReduce
    Ceph分层存储分析
    Ubuntu系统监控cpu memery 磁盘Io次数 IO速率 网卡 运行时间等信息的采集
    java动态加载类和静态加载类笔记
  • 原文地址:https://www.cnblogs.com/maskmtj/p/6349261.html
Copyright © 2020-2023  润新知