zoukankan      html  css  js  c++  java
  • 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 ;
        };
  • 相关阅读:
    CSU 1505: 酷酷的单词【字符串】
    HDU 2036 改革春风吹满地【计算几何/叉乘求多边形面积】
    HDU 2034 人见人爱A-B【STL/set】
    HDU 2031 进制转换
    HDU 1020 Encoding【连续的计数器重置】
    HDU 1999 不可摸数【类似筛法求真因子和】
    动态规划总结
    CSU 1785: 又一道简单题
    CSU 1779: 错误的算法【矩阵/模拟】
    CSU 1777: 大还是小?【模拟/后导0】
  • 原文地址:https://www.cnblogs.com/maskmtj/p/6349261.html
Copyright © 2011-2022 走看看