02-线性结构2 Reversing Linked List
来源:互联网 发布:淘宝内部优惠券哪个好 编辑:程序博客网 时间:2024/05/24 06:20
Given a constant KK and a singly linked list LL, you are supposed to reverse the links of every KK elements on LL. For example, given LL being 1→2→3→4→5→6, if K = 3K=3, then you must output 3→2→1→6→5→4; if K = 4K=4, you must output 4→3→2→1→5→6.
Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, a positive NN (\le 10^5≤10
5
) which is the total number of nodes, and a positive KK (\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.
Then NN lines follow, each describes a node in the format:
Address Data Next
where Address is the position of the node, Data is an integer, and Next is the position of the next node.
Output Specification:
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.
Sample Input:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
Sample Output:
00000 4 33218
33218 3 12309
12309 2 00100
00100 1 99999
99999 5 68237
68237 6 -1
思路:建立双向链表,依次访问直到数目为倒序的次数,若能访问,则用双向链表倒序输出,否则就正序输出。
#include <iostream>#include <vector>using namespace std;typedef struct link{ int rank; int base_add; int next_add; link* parent; link* child;}link;int main(){ int begin_add, N, listnum; cin >> begin_add; cin >> N; cin >> listnum; vector<pair<int, int>> address(N);//first is base address,second is next address int base_add, next_add, rank; for (int i = 0; i < N; i++) { cin >> base_add; cin >> rank; cin >> next_add; address[rank - 1].first = base_add; address[rank - 1].second = next_add; } link* top; link* current; link* child; top = (link*)malloc(sizeof(link)); current = top; top->parent = NULL; for (int i = 0; i < N; i++) { current->base_add = address[i].first; current->next_add = address[i].second; current->rank = i+1; if (i != N - 1)//not the last node { child = (link*)malloc(sizeof(link)); current->child = child; child->parent = current; current = child; } else { current->child = NULL; } } int count; current = top; bool flag = false; while (current != NULL) { count = 1; child = current; if (flag) printf("%05d\n", child->base_add); while (current != NULL&&count!=listnum) { current = current->child; count++; } if (count == listnum) { child = current; for (int j = 0; j < listnum-1; j++) { //if (child->parent != NULL) printf("%05d %d %05d\n", child->base_add, child->rank, child->parent->base_add); child = child->parent; } printf("%05d %d ", child->base_add, child->rank); current = current->child; flag = true; } else { for (int j = 0; j < count-2; j++) { printf("%05d %d %05d\n", child->base_add, child->rank, child->child->base_add); child = child->child; } printf("%05d %d %d\n", child->base_add, child->rank, -1); break; } } return 0;}
- 02-线性结构2 Reversing Linked List
- 02-线性结构2 Reversing Linked List
- 02-线性结构2 Reversing Linked List
- 02-线性结构2 Reversing Linked List
- 02-线性结构2 Reversing Linked List
- 02-线性结构2 Reversing Linked List
- 02-线性结构3 Reversing Linked List
- 02-线性结构3 Reversing Linked List
- 02-线性结构3 Reversing Linked List
- 02-线性结构2 Reversing Linked List (25分)
- 线性结构---Reversing Linked List
- 02-线性结构1. Reversing Linked List (25)
- 02-线性结构2. Reversing Linked List (25)
- 02-线性结构1. Reversing Linked List (25)
- 02-线性结构2. Reversing Linked List (25)
- 02-线性结构2. Reversing Linked List (25)
- 02-线性结构2. Reversing Linked List (25)
- 02-线性结构1. Reversing Linked List (25)
- JsonObject生成Json字符串,并且解析为对象-----JsonReader解析Json字符串
- activeMQ
- OpenCV_2.4.9图像元素遍历六种方法的源码及性能对比
- Public Function Merge2(rng As Range, splitter As String) As String
- MFC DLL创建对象
- 02-线性结构2 Reversing Linked List
- 使用google的zxing生成二维码
- c程序使用uci配置文件
- white-space、word-wrap和word-break区别
- JavaScript学习--Item22 Date对象全解析
- Middle-题目15:108. Convert Sorted Array to Binary Search Tree
- Merge k Sorted Lists(hard)
- 【MyBatis】——mybatis缓存以及整合ehcache
- 1006. Sign In and Sign Out (25)