zoukankan      html  css  js  c++  java
  • 链表区间逆序, 将单个链表的每K个节点之间逆序,打印出新链表;最后不足K的节点数不需要逆序;要求时间复杂度为O(n),额外空间复杂度为O(1)。

    链表区间逆序
    Description

    将单个链表的每K个节点之间逆序,打印出新链表;最后不足K的节点数不需要逆序;要求时间复杂度为O(n),额外空间复杂度为O(1)。

    Input

    输入第一行为用例个数, 每个测试用例输入的每一行的值用空格隔开,第一个表示链表长度,中间为节点值,最后代表K。

    Output

    输出的每一行为新的链表,节点值用空格隔开,末尾不要空格。

    Sample Input 1

    2
    8 1 2 3 4 5 6 7 8 3
    8 a b c d e f g h 4
    

    Sample Output 1

    3 2 1 6 5 4 7 8
    d c b a h g f e
    
    
    import java.io.EOFException;
    import java.util.*;
    
    public class Main {
        private static int T;
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            T = in.nextInt();
            in.nextLine();
            while (T-- != 0) {
                String s = in.nextLine();
                String[] dataStr = s.split(" ");
    
                int n = Integer.valueOf(dataStr[0]);
                if (n == 0){
                    print();
                    continue;
                }
                int spaceCnt = n-1;
                String[] strings = new String[n];
                for (int i = 0; i < n; i++) {
                    strings[i] = dataStr[i+1];
                }
                int k = Integer.parseInt(dataStr[dataStr.length-1]);
                if (k == 0){
                    for (int i = 0; i < n; i++) {
                        System.out.print(strings[i]);
                        if (spaceCnt-- != 0){
                            System.out.print(" ");
                        }
                    }
                    print();
                    continue ;
                }
                if (k > n){
                    for (int i = 0; i < n; i++) {
                        System.out.print(strings[i]);
                        if (spaceCnt-- != 0){
                            System.out.print(" ");
                        }
                    }
                    print();
                    continue ;
                }
                int point = -1;
                while (point + k < n){
                    for (int i = 0; i < k; i++) {
                        System.out.print(strings[point + k - i]);
                        if (spaceCnt-- != 0){
                            System.out.print(" ");
                        }
                    }
                    point += k;
                }
                if (point < n){
                    for (int i = point + 1; i < n; i++) {
                        System.out.print(strings[i]);
                        if (spaceCnt-- != 0){
                            System.out.print(" ");
                        }
                    }
                }
                print();
            }
        }
    
    
        private static void print(){
            if (T == 0){
                System.out.println();
            }else{
                System.out.println();
            }
        }
    }
    
    
  • 相关阅读:
    openfiler的介绍与使用
    linux磁盘修复(home或者其他目录无法进入,系统进入emergency mode)
    安装centos系统时出现dracut-initqueue time out 报错
    Linux中sz与rz命令
    /etc/passwd与/etc/shadow
    两台设备做DNS主从同步部署(含正向解析与方向解析)
    通过xftp传输文件失败的解决方法
    /etc/hosts与/etc/resolv.conf区别
    /etc/nsswitch.conf配置文件--服务搜索顺序
    docker学习笔记
  • 原文地址:https://www.cnblogs.com/billxxx/p/11768967.html
Copyright © 2011-2022 走看看