对数组结构体按照K值翻转

自己测试可以,但是PTA只能运行只能得4分,哪位大神帮我看看错哪了。

笔记和代码的思路来源:

好大学慕课浙江大学陈越、何钦铭的《数据结构》

  1 package ygh.study.demo1;
  2
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Scanner;
  6 /*
  7 Given a constant KKK and a singly linked list LLL, you are supposed to reverse the links of every KKK elements on LLL. For example, given LLL being 1→2→3→4→5→6, if K=3K = 3K=3, then you must output 3→2→1→6→5→4; if K=4K = 4K=4, you must output 4→3→2→1→5→6.
  8 Input Specification:
  9
 10 Each input file contains one test case. For each case, the first line contains the address of the first node, a positive NNN (≤105\le 10^5≤10?5??) which is the total number of nodes, and a positive KKK (≤N\le N≤N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
 11
 12 Then NNN lines follow, each describes a node in the format:
 13
 14 Address Data Next
 15
 16 where Address is the position of the node, Data is an integer, and Next is the position of the next node.
 17 Output Specification:
 18
 19 For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.
 20 Sample Input:
 21
 22 00100 6 4
 23 00000 4 99999
 24 00100 1 12309
 25 68237 6 -1
 26 33218 3 00000
 27 99999 5 68237
 28 12309 2 33218
 29
 30 Sample Output:
 31
 32 00000 4 33218
 33 33218 3 12309
 34 12309 2 00100
 35 00100 1 99999
 36 99999 5 68237
 37 68237 6 -1
 38 */
 39 public class Demo1 {
 40
 41     public static void main(String[] args) {
 42         List<Node> nodeList = new ArrayList<Node>();
 43         // nodeList.add(new Node("00000", 4, "99999"));
 44         // nodeList.add(new Node("00100", 1, "12309"));
 45         // nodeList.add(new Node("68237", 6, "-1"));
 46         // nodeList.add(new Node("33218", 3, "00000"));
 47         // nodeList.add(new Node("12309", 2, "33218"));
 48         // nodeList.add(new Node("99999", 5, "68237"));
 49         Scanner sc = new Scanner(System.in);
 50         String initAddress = sc.next();
 51         int n = sc.nextInt();
 52         int k = sc.nextInt();
 53         for (int i = 0; i < n; i++) {
 54             String address = sc.next();
 55             int element = sc.nextInt();
 56             String nextAddrss = sc.next();
 57             Node node = new Node(address, element, nextAddrss);
 58             nodeList.add(node);
 59         }
 60         sc.close();
 61         List<Node> sortedList = sort(nodeList, initAddress, n);
 62         transmit(sortedList, k);
 63         for (Node node : sortedList) {
 64             System.out.println(node.toString());
 65             System.err.println();
 66         }
 67
 68     }
 69
 70     public static void transmit(List<Node> list, int k) {
 71         int length = list.size();
 72         int i = 0;
 73         if (length < k) {
 74             track(list, 0, length);
 75             return;
 76         } else {
 77             while (i <= length) {
 78                 if (i + k <= length) {
 79                     track(list, i, i + k);
 80                     i = i + k;
 81                 } else {
 82                     track(list, i + k, length);
 83                     i = i + k;
 84                 }
 85             }
 86         }
 87     }
 88
 89     public static void track(List<Node> list, int begin, int end) {
 90         int mid = (begin + end) / 2;
 91         for (int i = begin; i < mid; i++) {
 92             Node temp = list.get(i);
 93             list.set(i, list.get(end - i - 1));
 94             list.set(end - i - 1, temp);
 95         }
 96     }
 97
 98     public static List<Node> sort(List<Node> list, String initAddress, int length) {
 99         List<Node> tempList = new ArrayList<Node>();
100         tempList.add(getNodeByAddress(list, initAddress));
101         for (int i = 1; i < length; i++) {
102             tempList.add(getNodeByAddress(list, tempList.get(i - 1).getNextAddress()));
103         }
104
105         return tempList;
106     }
107
108     public static Node getNodeByAddress(List<Node> list, String address) {
109         for (Node node : list) {
110             if (node.getAddress().equals(address)) {
111                 return node;
112             }
113         }
114         return null;
115     }
116
117 }
118
119 class Node {
120     private String address;
121
122     private int element;
123
124     private String nextAddress;
125
126     public String getAddress() {
127         return address;
128     }
129
130     public void setAddress(String address) {
131         this.address = address;
132     }
133
134     public int getElement() {
135         return element;
136     }
137
138     public void setElement(int element) {
139         this.element = element;
140     }
141
142     public String getNextAddress() {
143         return nextAddress;
144     }
145
146     public void setNextAddress(String nextAddress) {
147         this.nextAddress = nextAddress;
148     }
149
150     public Node(String address, int element, String nextAddress) {
151         super();
152         this.address = address;
153         this.element = element;
154         this.nextAddress = nextAddress;
155     }
156
157     public Node() {
158         super();
159     }
160
161     @Override
162     public String toString() {
163         return this.getAddress() + " " + this.getElement() + " " + this.getNextAddress();
164     }
165
166 }

时间: 2024-12-04 20:59:52

对数组结构体按照K值翻转的相关文章

std::map使用结构体自定义键值

使用STL中的map时候,有时候需要使用结构题自定义键值,比如想统计点的坐标出现的次数 struct Node{ int x,y; }; ...... map<Node,int>mp; mp[(Node){x,y}]++; 这样子的话,会出现一堆报错 c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_function.h||In instantiation of 'bool std::less<_Tp>::operator()(

第五章:数组 结构体 和联合体

1.结构体 2.联合体 3.结构体和联合体的操作 4.非压缩数组 5.压缩数组 6.数组操作 7.数组foreache 循环 8.用于数组的特殊系统函数 结构体 1.结构体成员可以是任何数据类型 包括基本类型和用户自定义类型 2.结构体的声明 var/wire 都可以定义为结构体类型.当定义为结构体类型时,结构体中的成员都必须是四态类型,成员不能是wire类型. 3.结构体的初始化 用值列表方式初始化 '{} 4.结构体的赋值 5.压缩结构体 可以视为独立的变量,具体与向量类似的操作 6.非压缩

C数组&amp;结构体&amp;联合体快速初始化

背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元素或结构体某些成员进行选择性初始化,只需指明它们所对应的数组下标或结构体成员名.GNU C将其作为C89模式的扩展. 借助指定初始化特性,可实现数组或结构体元素的快速初始化. 1 数组初始化 在数组初始化列表中使用"[index常量表达式]=value"形式可对index所指定的某个元素进

如何在STL的map中使用结构体作为键值

这里首先给出容器map的原型: template < class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map{ ... } 可以看到模板参数一共有四个,第一个就是Key,即键:第二个就是值:第四个就是空间配置器,默认使用alloc(随STL版本不同而不同).那么第三个是啥? 我们知道,map的底层数据结构,其实是树,更确切的说,是一个RB-tree(红黑树).RB-tree树在进行插

C/C++结构体有效对齐值的确定

看到这样一个笔试题目,如下 32位机器上定义如下结构体: struct xx { long long _x1; char _x2; int _x3; char _x4[2]; static int _x5; }; int xx::_x5; 正确答案是24. 你做对了么?下面给出解释: 结构体的有效对齐值的确定: 当未明确指定时,以结构体中最长的成员的长度为其有效值 当用#pragma pack(n)指定时,以n和结构体中最长的成员的长度中较小者为其值. 当用__attribute__ ((__p

C#调用C++ 平台调用P/Invoke 结构体--输入输出参数、返回值、返出值、结构体数组作为参数【五】

[1]结构体作为输入输出参数 C++代码: typedef struct _testStru1 { int iVal; char cVal; __int64 llVal; }testStru1; EXPORTDLL_API void Struct_Change( testStru1 *pStru ) { if (NULL == pStru) { return; } pStru->iVal = 1; pStru->cVal = 'a'; pStru->llVal = 2; wprintf(

结构体和值类型(转)

如果你曾经使用过 Objective-C 或者像 Ruby,Python,JavaScript 这样的语言,可能会觉得 Swift 里的结构体就像外星人一样奇异.类是面向对象编程语言中传统的结构单元.的确,和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体?正是因为它的使用范围受限,使得结构体在构建代码块 (blocks) 的时候非常灵活.在本文中,你将会学习到结构体和其他的值类型是如何大幅提高代码的清晰度.灵活性和可

黑马程序员-----结构体数组

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲  结构体数组 一.结构体数组的概念       数组的元素也可以是结构类型的.因此可以构成结构型数组.结构数组的每一个元素都是具有相同结构类型的下表结构变量.在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体.如一个班的学生

数组强制转换成结构体指针,结构体内部指针的指向问题

如果直接操作结构体成员是不会取到不期望的值 但是对于要求连续数据格式的时候需要考虑对齐的问题 例如通讯中的数据帧格式等 ,如 ip数据包等#pragma   pack(1) struct   tagStruct {     ... } t; #pragma   pack() 的方式来强制连续存放 其中前面   pack(1)   是指对齐边界为   1 1.几个结构体例子: struct{short a1;short a2;short a3;}A; struct{long a1;short a2