• PAT——1025. 反转链表


    给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。

    输入格式:

    每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。

    接下来有N行,每行格式为:

    Address Data Next

    其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。

    输出格式:

    对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。

    输入样例:

    00100 6 4
    00000 4 99999
    00100 1 12309
    68237 6 -1
    33218 3 00000
    99999 5 68237
    12309 2 33218
    

    输出样例:

    00000 4 33218
    33218 3 12309
    12309 2 00100
    00100 1 99999
    99999 5 68237
    68237 6 -1
    
     1 package com.hone.basical;
     2 import java.util.ArrayList;
     3 import java.util.HashMap;
     4 import java.util.List;
     5 import java.util.Map;
     6 import java.util.Scanner;
     7 
     8 /**
     9  * 原题目:https://www.patest.cn/contests/pat-b-practise/1025
    10  * @author Xia
    11  * 错误:部分正确
    12  * 核心:用一个HashMap来保存所有的结点,然后再利用List来连接起所有的结点
    13  */
    14 public class basicalLevel1025ReverseLinked{
    15     public static void main(String[] args) {
    16         Scanner s = new Scanner(System.in);
    17         String firstAddress = s.next();
    18         int total = s.nextInt();
    19         int reverNumNode =s.nextInt();
    20         
    21         //用一个Map来存储所有的链表结点
    22         //string表示当前地址,node表示结点(有三个属性)
    23         Map<String, Node> nodeMap = new HashMap<String,Node>();
    24         
    25         for (int i = 0; i < total; i++) {
    26             String address = s.next();
    27             int data = s.nextInt();
    28             String nextAddress = s.next();
    29             Node node = new Node(address,data,nextAddress);
    30             nodeMap.put(address, node);
    31         }
    32         
    33         //现在将存储在map中所有孤零的结点连一起,并且存储在list中
    34         List<Node> nodeList = new ArrayList<Node>();
    35         
    36         String next = firstAddress;        //下一个结点是头结点,则说明开头有一个备用的空结点
    37         //用while循环将所有的结点都添加到list中
    38         while (true) {
    39             Node getNode = nodeMap.get(next);
    40             nodeList.add(getNode);
    41             if (getNode.nextAddress.equals("-1")) {
    42                 break;
    43             }else {
    44                 next = getNode.nextAddress;
    45             }
    46         }
    47         
    48         //现在开始操作反转问题
    49         for (int i = reverNumNode; i < nodeList.size(); i+=reverNumNode) {
    50             int start = i - reverNumNode;
    51             int end = i-1;
    52             while(start < end){
    53                 Node tempNode = nodeList.get(start);
    54                 nodeList.set(start, nodeList.get(end));
    55                 nodeList.set(end, tempNode);
    56                 start++;
    57                 end--;
    58             }
    59         }
    60         
    61         //输出所有的结点
    62         for (int i = 0; i < nodeList.size()-1; i++) {
    63             Node presentNode = nodeList.get(i);
    64             Node nextNode = nodeList.get(i+1);
    65             System.out.println(presentNode.address+" "+presentNode.data+" "+
    66             nextNode.address);
    67         }
    68         
    69         //输出最后一个结点
    70         Node lastNode = nodeList.get(nodeList.size()-1);
    71             System.out.println(lastNode.address+" "+lastNode.data+" "+"-1");
    72     }
    73 } 
    74 
    75 //定义一个结点类
    76 class Node{
    77     String address;
    78     int data;
    79     String nextAddress;
    80     
    81     public Node(String address,int data,String nextAddress){
    82         this.address = address ;
    83         this.data = data ;
    84         this.nextAddress = nextAddress ;
    85     }
    86 }
  • 相关阅读:
    汽车档位作用
    大家免着惊
    出头天 闽南语歌词
    Configuration所有配置简介
    android图片缓存框架Android-Universal-Image-Loader
    java泛型 之 入门(interface)
    broadcom6838开发环境实现函数栈追踪
    win 开机 Microsoft corparation 滚动栏
    Linux中下载,压缩,解压等命令
    python实现人人网用户数据爬取及简单分析
  • 原文地址:https://www.cnblogs.com/xiaxj/p/7985641.html
Copyright © 2020-2023  润新知